1.Select语句查漏补缺
select是SQL中使用最多的一个语句,主要用于查询数据,特别是结合一些条件查询语句实现对特定数据的检索。下面列一些之前学习Select语句没有太注意的地方:
(1)all 与distinct
select 的基本用法是: select column1,column2... from table1
select all 与select是等价的,所以我们平时基本见不到select all column1.... from table1 这样的表达式
select distinct 是用于去除列中重复数据的,如果有多个列是去除每个列都完全相同的重复数据。distinct虽然不常用也不常见,但是他属于sql内部语句,在剔重方面效率还是要高一些的。另外见有人提到distinct对变长字段无法区分(有待验证)
(2)别名的问题
有是需要用到别名,比如 select column1+2 alias1 from table1;
或者 select (column1+2)alias1 from table1;
再或者 select column1+2 = alias1 from table1;
不同的SQL解释器有不同的用法,需要注意区别下。
2. 表达式
SQL 表达式与公式类似,但 SQL 表达式是以结构化查询语言 (SQL) 编写的。SQL 表达式可以用于向数据库查询特定数据集合。可以基于 SQL 表达式字段进行排序、分组和选择。表达式可以返回一个值,表达式的类型非常广泛,它以包括各种类型的数据,如数字字符,以及逻辑型。
3.运算
运算可以归为六组:数值型、比较型、字符型、逻辑型和备注型以及混合型;
(1)数值型运算
数值型运算有加、减、乘、除和取模,运算顺序是先乘后除再模后加减.
(2)比较运算:
比较运算就是将两个表达式进行比较并返回True,False,Unknow三个数值中的一个。其中Unknow的出现主要是针对字段为空的情况。对于空字段,使用“IS NULL ”而非 “= NULL” 进行判断。
比较有 = , > ,>=.<,<=, 不等于(<>或!=),需要注意的是,在输出结果时,会根据符号右侧要比较的值的长度对相应列进行截取,比如有列name:bobo,lili,vivi;
输入select name from table_name where name<'ww',得到的结果时na:bo,li,vi;
(3)字符操作:
LIKE:进行非精确查询(“= ”进行的是精确查询)。LIKE表达式中有通配符 “%”和“_”。"%"不会限制匹配字符的位置及个数,“_”用于指定特定位置的符号。用法如“A%” (以A开头的),"%A”(以A结尾的符号),“_A_A”(字符长度为4,第二、四字符为A的),"88_2_2%"(任意长度,第一二位是8,第四六位是2的数字)。用法:SELECT * FROM FRIENDS WHERE FIRSTNAME LIKE '_L%'。
|| :连接符,将字段连接起来输出,用法:SELECT LASTNAME || ',' || FIRSTNAME NAME FROM FRIENDS
(4) 逻辑运算:
逻辑运算用于SQL 的WHERE 子句中将两个或更多条件组合在一起.
AND OR NOT 三种运算,注意判断字段非空使用IS NOT NULL。
(5)集合运算
UNION: 将返回两个查询的结果并去除其中的重复部分,用法:
SELECT NAME FROM SOFTBALL UNION SELECT NAME FROM FOOTBALL
UNION ALL: 将返回两个查询的结果但并不除去其中的重复部分,用法:
SELECT NAME FROM SOFTBALL UNION ALL SELECT NAME FROM FOOTBALL
INTERSECT:返回两个表中共有的行,用法:
SELECT * FROM FOOTBALL INTERSECT SELECT * FROM SOFTBALL
MINUS :返回的记录是存在于第一个表中但不存在于第二个表中的记录,用法:
SELECT * FROM FOOTBALL MINUS SELECT * FROM SOFTBALL
(6)从属运算
IN:SELECT * FROM FRIENDS WHERE STATE IN('CA','CO','LA') 等价于
SELECT * FROM FRIENDS WHERE STATE= 'CA' OR STATE ='CO' OR STATE ='LA'
BETWEEN:SELECT * FROM PRICE WHERE WHOLESALE BETWEEN 0.25 AND 0.75 等价于
SELECT * FROM PRICE WHERE WHOLESALE> 0.25 AND WHOLESALE<0.75