列的别名,也可以不用双引号,当别名比较特殊时,必须使用双引号
| select user as "用户" from student; |
| |
null值不等于0 并且可以参与运算, 任何值与null运算结果都为null,非要使用含有null值字段参与运算时使用IFNULL(字段名,0)
去除重复行,在需要去重的字段前加distinct去重,一般 单独 使用,后面子查询中也会用到
| select distinct user |
| from student; |
| 为user字段去重示例 |
着重号``
表名为关键字时,使用``
查询常数
| select '锅巴编程',name,age |
| from user |
显示表结构
过滤数据
where 过滤条件
算数运算符
在SQL中,+号没有连接的作用,就表示加法运算。如果有字母都按照数字0处理运算。 除运算,/ 的结果都为浮点型,不管能不能除净。保留后四位。
取模运算:% mod 结果的正负只与被模数有关,与模数无关。
比较运算符 =
排序 order by 升序 ASC 降序 DESC 位于SQL语句结尾
列的别名只能在order by 中使用,不能在where中使用
强调:where在from之后,order by之前
二级排序 order by 字段a desc,字段b asc 按照a降序,b升序
分页limit 0,5
not between 不在...之间 not between 2000 and 5000 不在2000到5000之间
练习 where email like '%e%' 邮箱包含e where email regexp '[e]'
多表查询 需要有连接条件 避免出现笛卡尔积
sql优化的角度,建议多表查询时,每个字段前都加上其所在的表
可以给表起别名 起别名后必须使用别名
如果有n个表连接查询,则需要至少n-1个连接条件 , 否则肯定会出现笛卡尔积错误

归纳式 : 总--分 直接给到,直接记忆 演绎式: 提出问题1--解决问题1,提出问题2--解决问题2...
多表查询的分类:角度1:等值连接--非等值连接 角度2:自连接--非自连接 角度3:内连接--外连接
自连接 :自己引用自己,自我引用
内连接 :只把逗号左边的表和逗号右边的表符合条件的一部分查出来,其他的都不要,就叫内连接。即

外连接:结果集包含了一个表与另一个表不匹配的行
分类 : 左外连接、右外连接、满外连接。
SQL99语法实现多表查询
内连接
| select A.name,A.age,B.address,C.location |
| from A join B |
| on A.idCard = B.idCrad |
| jion C |
| on A.cityid=C.cityid |
外连接


满外连接:满外连接的结果 = 左右表匹配的数据 + 左表没有匹配到的数据 + 右表没有匹配到的数据。
由于mysql不支持FULL JOIN,于是我们需要用 LEFT JOIN UNION RIGHT join代替。
union 的使用 合并查询的结果:可以将多条select语句之间使用union或union all关键字分隔。
语法:
| select 字段名1,字段名2,... |
| from 表名1 |
| union |
| select 字段名1,字段名2,... |
| from 表名2 |
| |
说明:union操作符返回两个 查询的结果的并集,并去重!

union all 操作符 :返回查询两个结果的并集,不去重!

注意:union all执行效率高,但是不去重!union执行效率略低,但是去重!如果业务中不需要去重,或者已知结果无重复,尽量使用union all。
SQL99语法新特性1:自然连接natural :会自动查询两张表中所有相同的字段
,然后进行等值连接
。
| select a,b,c |
| from A jion B |
| on A.id = B.id |
| and C.id = B.id |
| |
| select a,b,c |
| from A natural jion B |
| |
SQL99语法新特性2:using,指定属性连接 ,但是被连接的字段名称必须一样。
| select a,b,c |
| from A jion B |
| on A.id = B.id |
阿里巴巴规范:超过三个表禁止用join,因为效率会变差!
四舍五入
select ROUND(123.456,0),ROUND(123.456,-2),ROUND(123.456,3)
from DUAL
截断
select truncate(123.456,-1),TRUNCATE(123.456,2)
from
DUAL