38、谓词的使用
LIKE 关键字进行前方一致查询。查询以 ddd 开头的内容
SELECT * FROM 表名 WHERE XXX LIKE 'ddd%' ;
LIKE 关键字进行中间一致查询。查询包含 ddd 的内容
SELECT * FROM 表名 WHERE XXX LIKE '%ddd%' ;
LIKE 关键字进行后方一致查询。查询以 ddd 结尾的内容
SELECT * FROM 表名 WHERE XXX LIKE '%ddd' ;
BETWEEN关键字 —— 范围查询
例如: SELECT price FROM 表名 WHERE price BETWEEN 100 AND 1000 ;
IS NULL 和IS NOT NULL 选取出某些值为NULL的列的数据 不能用= ,只能用IS NULL,要查NULL 以外的数据,则使用IS NOT NULL。
IN 和OR 的简便实用。 例如我们要查询价格为300,500,600商品。可以这么写。
SELECT price FROM 表名 WHERE price = 300 OR price =500 OR price=600 ; 这么写语法没问题,但是这样随着条件的变多,SQL语句会变得很长,我们就可以使用IN 来写。 SELECT price FROM 表名 WHERE price IN (300,500,600); 会方便很多。当然选取这3个值之外的商品只要将IN 改成NOT IN 就可以。
39、CASE表达式 。简单来说CASE表达式就是我们编程语言里的 条件分支。 CASE表达式就是(Java里的case)SQL版本。分为简单CASE表达式和搜索CASE表达式。后者包括前者的全部功能,所以我们看后者。搜索CASE表达式如下:
CASE WHEN 求职表达式 THEN 表达式
WHEN 求职表达式 THEN 表达式
WHEN 求职表达式 THEN 表达式
ELSE 表达式
END
/*ELSE子句是可以省略的,但是为了更好的理解,最好不要省略,END 不能省略*/
40、集合运算,集合运算就是对满足同一规则的记录进行的加减等四则运算。(通过集合运算,可以得到两张表中记录的集合或者公共记录的集合,又或者其中某张表的记录的集合)
41、表的加法 —— UNION(并集)
SQL语句格式 : SELECT 列1 ,列 2 FROM 表1 UNION SELECT 列1,列2 FROM 表2 ; 如果查询出来的数据行2个表都有,则只显示1次。意思就是 集合运算符会除去重复的记录。
UNION 的注意事项: 1、作为运算对象的记录的列数必须相同 2、作为运算对象的记录中列的类型必须一致(因为要对2张表进行求并集,意思就是对应的列数量和类型上必须匹配) 3、可以使用任何SELECT语句,都是ORDER BY 子句只能在最后使用一次。
42、包含重复行的集合运算 —— ALL选项
在UNION后面 加上ALL 就可以保留重复行。
SQL语句格式 : SELECT 列1 ,列 2 FROM 表1 UNION ALL SELECT 列1,列2 FROM 表2 ;
43、选取表中的公共部分 —— INTERSECT
INTERSECT是作用于两张表, 选取出他们的公共记录。 (交集)
SQL语句格式 : SELECT 列1 ,列 2 FROM 表1 INTERSECT SELECT 列1,列2 FROM 表2 ;
44、记录的减法 ——EXCEPT
SQL语句格式:SQL语句格式 : SELECT 列1 ,列 2 FROM 表1 EXCEPT SELECT 列1,列2 FROM 表2 ;
表1-表2,意思就是查询表1里面,除去2个表交集的部分。
45、联结 (以列为单位对表进行联结)简单来说就是有2个表或者多个表,每个表里面都有我们所需的信息,都是都不完整,需要从每个表取出点东西进行联结就可以得到我们想要的完整信息。 联结分为内联结和外联结。
内联结:SQL语句: SELECT 表1别名.列1 , 表1别名.列2 ,表2别名.列1, 表2别名.列2 FROM 表1 AS 表1别名 INNER JOIN 表2 AS 表2别名 ON 表1别名.列名 = 表2别名.列名 ;
注意要点:1、 FROM子句里需要在2张表之间加INNER JOIN ,不用别名也可以,但是会造成SQL语句太长不利于可读性。
2、 ON 子句 , ON语句就是指定2张表之间的联结所需使用的列。(联结键)
3、SELECT子句中指定的列,最好是表的别名和 点的方式 ,来避免混乱。
外联结 :外联结和内联结其实用法并没什么不同,只不过是将INNER JOIN改成了OUTER JOIN,但是结果会有不同。与内联结结果相比,外联结的结果应该是会多一点。 内联结只能选取出同时存在于两张表中的数据,而外联结则不是,只要有数据存在某一个表当中,不管另一个表有没有对应的数据,它都会读取出来。
外联结中还可以使用LEFT 和 RIGHT 来指定哪张表是主表。 使用LEFT则左边的是主表,RIGHT则右边的是主表。结果完全相同。
例如:SELECT 表1别名.列1 , 表1别名.列2 ,表2别名.列1, 表2别名.列2 FROM 表1 AS 表1别名 LEFT OUTER JOIN 表2 AS 表2别名 ON 表1别名.列名 = 表2别名.列名 ;
交叉联结:交叉连接不带WHERE子句,它返回被连接的两个表所有数据行的笛卡尔积,返回结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 例如表1有13条记录,表2有8条,则它们交叉联结返回记录有13*8=104条。