SQL(Structured Query Language)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
SQL同时也是数据库脚本文件的扩展名。
基本语法数据库的相关名称:数据库、表、字段、记录SQL语言的最基本功能是增、删、查、改。
增:INSERT INTO 表名(字段1,字段2) V ALUES (值1,值2)其中——值如果是字符串如:’名字’。
如果是变量——字符串:’” & 变量& ”‘;删:DELETE 表名从数据库中的删除表DELETE FROM 表名WHERE 条件查:SELECT *(或:字段1,字段2) FROM 表名WHERE 条件ORDER BY 字段ASC(或:DESC-降序) 改:UPDA TE 表名SET 字段=值WHERE 条件几个子句:WHERE子句可包括各种条件运算符:比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!<范围运算符(表达式值是否在指定的范围):BETWEEN…AND…或NOT BETWEEN…AND…例:范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) 或NOT IN (项1,项2……)例:列表运算符例:country IN ('Germany','China')模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。
可用于char、varchar、text、ntext、datetime和smalldatetime等类型查询。
可使用以下通配字符:百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
例如:限制以Publishing结尾,使用LIKE '%Publishing'限制以A开头:LIKE '[A]%'限制以A开头外:LIKE '[^A]%'空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL例:空值判断符例WHERE age IS NULL逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR。
优先级为NOT、AND、OR高级语法1. case when条件表达式SQL CASE 表达式是一种通用的条件表达式,类似于其它语言中的if/else 语句。
例子:select CONCA T(case click when 0 then 'nan' end,case aid when 132 then 'yi' end) from dede_addoninfos(可以用函数)2.UNION(联合查询)[SQL 语句2] 假设我们有以下的两个表格,Store_Information 表格store_name Sales DateLos Angeles $1500 Jan-05-1999San Diego $250 Jan-07-1999Los Angeles $300 Jan-08-1999Boston $700 Jan-08-1999Internet Sales 表格Date SalesJan-07-1999 $250Jan-10-1999 $535Jan-11-1999 $320Jan-12-1999 $750而我们要找出来所有有营业额(sales) 的日子。
要达到这个目的,我们用以下的SQL 语句:SELECT Date FROM Store_InformationUNIONSELECT Date FROM Internet_Sales 结果:DateJan-05-1999Jan-07-1999Jan-08-1999Jan-10-1999Jan-11-1999Jan-12-1999有一点值得注意的是,如果我们在任何一个SQL 语句(或是两句都一起) 用"SELECT DISTINCT Date" 的话,那我们会得到完全一样的结果。
SQL Union AllUNION ALL 这个指令的目的也是要将两个SQL 语句的结果合并在一起。
UNION ALL 和UNION 不同之处在于UNION ALL 会将每一笔符合条件的资料都列出来,无论资料值有无重复。
UNION ALL 的语法如下:[SQL 语句1]UNION ALL[SQL 语句2] 我们用和上一页同样的例子来显示出UNION ALL 和UNION 的不同。
同样假设我们有以下两个表格:Store_Information 表格store_name Sales DateLos Angeles $1500 Jan-05-1999San Diego $250 Jan-07-1999Los Angeles $300 Jan-08-1999Boston $700 Jan-08-1999Internet Sales 表格Date SalesJan-07-1999 $250Jan-10-1999 $535Jan-11-1999 $320Jan-12-1999 $750而我们要找出有店面营业额以及网络营业额的日子。
要达到这个目的,我们用以下的SQL语句:SELECT Date FROM Store_InformationUNION ALLSELECT Date FROM Internet_Sales 结果:DateJan-05-1999Jan-07-1999Jan-08-1999Jan-08-1999Jan-07-1999Jan-10-1999Jan-11-1999Jan-12-1999表1A Ba 1b 0c 3d 0e 2表2A Bc 0e 4合并两个表除去重复的数据(以表2的数据为主),我们将会得到以下的表:A Ba 1b 0c 0d 0e 4select A,B from 表1 where A not in(select A from 表2)unionselect A,B from 表22. 连接查询连接查询是指基于两个或者两个以上的表或者视图的查询,在实际的应用中,查询单个表可能无法满足应用程序的需求,这种情况下就需要使用连接查询;#当使用连接查询的时候,必须在from子句后面制定两个或者两个以上的表#在使用连接查询的时候,应该在列名前加表明作为前缀,但是,如果不同表之间的列名不同,可以不加表名前缀,如果在不同的表之间存在着同名列,在列名之间必须加上前缀;#在进行连接查询的时候,可以使用表的别名来简化连接查询语句;1)相等连接:相等查询是指使用小灯比较符(=)指定连接条件的连接查询,该类连接查询主要是检索主从表之间的相关数据select table1.column table2.column from table1,table2 where table1.column1=table2.column2;2)不等连接:不等连接是指在连接条件中使用除相等比较符外的其他比较操作符的连接查询;不等连接主要用于在不同表之间显示特定范围的信息如:select a.ename,a,sal,b.grade from emp a,salgrade b where a.sal between b.losal and b.hisal;3)自连接:自连接是指在同一张表之间的查询连接,他主要是用在自参照表显示上下级关系或者主次关系;如下面有这样一张表EMPNO ENAME MGR----------------- ------------- ---------------7839 KING7566 JONES 78397698 BLAKE 78397782 CLARK 7566在这份表中,有员工id,员工姓名,员工上级,这样的表,本来在行与行之间存在上下级,从属关系,所以这里就用到了自连接;如:select manager.ename From emp manager,emp worker where manager.empno=worker.mgr and worker.ename='BLAKE'3)内连接和外连接:内连接是用于返回满足条件的记录,外连接则是内连接的扩展,他不仅会返回满足条件的所有连接,还会返回不满足连接条件的记录,语法:select table1.column,table2.column2 from table1 [INNER | LEFT | RIGHT | FULL ] join table2 on table1.column1=table2.column21内连接:内连接返回满足连接条件的所有记录,默认情况下,在执行连接查询时如果没有制定任何操作符,哪么这些连接查询就是属于内连接;其实内连接和等值连接效果是一样的,之所以称之为内连接,是相对与外连接来说的!如:select a.dname,b.ename from dept a,emp b where a.deptno=b.deptno and a.deptno=10;2左(右)外连接:左外连接是用LEFT 【RIGHT】JOIN选项来实现的,当使用左(右)外连接的时候,不仅会返回用户连接条件的所有记录,而且会返回不满足连接条件的连接操作符左【右】边表的其他行;4)完全外连接:完全外连接是指通过full JOIN来实现的,当使用完全外连接时,不仅会返回满足连接条件的所有行,而且会返回不满足连接条件的所有其他行;3.子查询。