1:MySQL-SQL语句

- 存在外键依赖关系的表
如A外键依赖与B
则创建时,先创建录入B,再A
则删除时,先删除A,在删除B.
- 插入值时,对有AUTO_INCREMENT修饰的列,指定NULL,系统会为其分配一个唯一的值.
- 插入值时,只显示指明要插入值列的集合,为显示指明的列采用默认值.如这些列中某个无默认值,则会报错.
- 另一种插入值的语法是
INSERT INTO tbl_name SET col_name1=value1, col_name2=value2,...;
未指明的列采用默认值,如该列无默认值,则会报错.
- 基于文件内SQL语句插入值
% ... < xxx.sqp
mysql>source xxx.sql
- 基于原始数据插入值
%mysqlimport xxx
mysql>LOAD DATA xxx
- where条件语句判断列的值是否为NULL或不是NULL
where col_name is null或者where col_name <=> null
where col_name is not null或者where not (col_name <=> null)
- 对结果排序
可以指定若干列.且对每个列单独指定 DESC/ASC.
更加定制化方案举例
order by if(death is null, 0, 1), death desc, last_name
对death列为null的行,0,death, last_name构成一个排序键1
对death列不为null的行,1,death,last_name构成一个排序键2
键1中每个元组都排在2前.
- 从结果中随机选出N个
order by rand() 
limit n;
- select
选择的项中每项可以是表中的列,也可以是任意的SQL表达式.
项的显示列名可用AS显式定义.
- DATE
格式 'yyyy-mm-dd'
如'2020-12-01'
对一个date对象可以对其进行信息提取,比较
date a
month(a)  # 获取日期中的月份数字
monthname(a) # 获取日期中月份名称字符串
dayofmonth(a) # 获取日期中月内天数
curdate() # 用于获取今日的日期
timestampdiff(1, date1, date2) # 计算date2-date1,1用于表示对计算结果的单位.可为year/month/day,即以年/月/天为单位表示结果.
to_days(a) # 用于把一个date对象转化为以天表示的数值
date_add(date, interval xx unit) # date_add('1970-1-1', interval 10 year)
date_sub(date, interval xx unit) # date_sub('1970-1-1', interval 10 year)

- 模式匹配
_ 匹配单个字符
% 匹配字符序列
where col_name like 'xxx';
- 变量
自定义变量语法为 @ variable_name
在select与语句里为变量赋值为@ variable_name := value
设置变量值可用set,为set @ variable_name := value
访问变量值用@ variable_name
变量可用于存储值/结果,以便在后续通过变量引用其内容.
例:
select @xx:=birth
from president
where id = '111';
select @xx;
- select的项前加distinct可以用来保证结果表中不出现重复行
count(*)可用于统计元组个数
count(col_name)可用于统计结果中此列不为NULL行个数
若是有group by对结果进行了分组,则聚集函数对每个分组产生一个元组作为结果.若一个分组中某列的值一致,可以选出此列.
- 子句顺序
1.采用group by下子句执行顺序
先执行from得到结果元组集合
使用where对结果元组集合执行过滤
使用group by对结果元组集合执行分组.如果group by有多个列,则分组数目为过滤后元组集合内每个列不同值个数之积.
使用select对每个分组执行处理产生一个结果元组,多个分组下,得到一个结果元组集合[采用了分组子句的select经常会搭配聚集函数]
使用having对结果元组集合进行过滤
使用order by对过滤后结果元组进行排序
使用limit限制结果元组个数
使用with rollup,会对结果元组作一个汇总,汇总结果也作为一个结果元组
2.不采用group by下子句执行顺序
先执行from得到结果元组集合
使用where对结果元组集合执行过滤
使用select从每个过滤后元组依据选择信息导出一个结果元组
使用order by对结果元组集合进行排序
使用limit限制结果元组个数
- 连接
FROM A [INNER/...] JOIN B [INNER/...] JOIN C ....
ON xxx1
这里先是对多个表执行连接操作得到结果元组集合
然后对结果元组集合依据ON中条件进行首次过滤
A LEFT JOIN B意思为对A,B连接后的结果元组中,
在ON xxx过滤条件中,除了满足过滤条件的加入过滤后结果元组.
对A中一个元组a,若基于该元组对B中k个元组连接所得的k个结果元组均不满足过滤条件,则结果元组中a和B中一个各个列值为null的元组进行组合,产生一个结果元组.放入过滤后结果元组.
对RIGHT JOIN类似
对INNER JOIN则严格按过滤条件产生过滤后结果元组

一个表可以和自身连接,不过为了区分,参与自身连接的表都会取个别名.
- 在SQL可以在任何需要单个值/表的地方,
用一个返回结果为与此处要求出现内容类型匹配的select查询来代替.
这样的select查询称为子查询.
- delete
delete from table_name
where xxx
- update
update table_name
set col_name = new_value
where xxx

猜你喜欢

转载自blog.csdn.net/x13262608581/article/details/110760011
今日推荐