SQL 从入门到 DBA 删库跑路

时间:2022-02-19 17:06:40

SQL 从入门到 DBA 删库跑路


一.基础

人员信息表:

ID 姓名 性别 出生 婚否 学历 工资 工会
35009449 孙xx 1978-2-17 未婚 中专 3000 TRUE
35000149 吴x 1972-8-11 已婚 高中 6283 FALSE
35000269 魏xx 1974-5-5 已婚 技校 7374 TRUE
35000281 苏xx 1972-9-15 未婚 高中 7883 FALSE
35002528 姜xx 1958-11-21 已婚 大学 8902 TRUE
35002560 房xx 1972-10-3 已婚 中专 9268 TRUE
35002566 刘x 1975-11-1 已婚 中专 9999 FALSE
35002584 贾x秋 1960-8-24 已婚 初中 1626 TRUE
35002635 李x 1974-4-20 已婚 大学 2880 FALSE
35002680 李x庆 1964-12-7 已婚 技校 2880 FALSE
35001025 王国x 1970-7-8 已婚 初中 3716 TRUE
35001123 刘x忠 1960-12-9 已婚 高中 4552 TRUE
35001448 樊ss 1971-10-7 已婚 大学 5388 FALSE
35001787 李as 1974-6-28 已婚 技校 6224 TRUE
35001790 王zxc 1972-3-29 已婚 技校 7060 TRUE
35002049 张da 1965-4-2 已婚 高中 7896 FALSE
35002089 赵asd 1958-3-3 已婚 高中 8732 TRUE
35002223 韩zz 1969-2-10 已婚 大学 9568 FALSE
35002237 李! 1955-9-20 已婚 初中 1404 TRUE
35002258 许=z 1974-9-6 已婚 大学 2240 TRUE
注意:为了本表格仅用于学习SQL语法为目的,请勿非法使用,后果自负!              

1. 基本功

[root@BenLam-vm_0 ~]# Mysql>

SELECT * FROM 人员信息表
SELECT DISTINCT 学历 FROM 人员信息表
SELECT * FROM 人员信息表 WHERE 工资 > 3000
SELECT * FROM 人员信息表 WHERE 工资 > 3000 and 出生 = '1978-2-17'
SELECT * FROM 人员信息表 WHERE 工资 > 3000 and 出生 = '1978-2-17' order by ID desc --降序排序
SELECT * FROM 人员信息表 WHERE 工资 > 3000 and 出生 = '1978-2-17' order by ID asc --升序排序
SELECT * FROM 人员信息表 WHERE 工资 > 3000 and 姓名 LIKE '李%' INSERT INTO 人员信息表 (ID, 姓名, 性别, 出生, 婚否, 学历, 工资, 工会) VALUES (35002258, '许=z', '女', '1974-9-6', '已婚', '大学', '2240', 'TRUE') UPDATE 人员信息表 SET 工资='10000' WHERE 姓名='许=z' DELETE FROM 人员信息表 WHERE 姓名='许=z'

2. 进阶功

[root@BenLam-vm_0 ~]# Mysql>

SELECT * FROM 人员信息表  WHERE 职称 IS NULL
SELECT * FROM 人员信息表 WHERE 职称 IS NOT NULL
SELECT * FROM 人员信息表 WHERE 婚否<>"已婚" SELECT min(工资) FROM 人员信息表
SELECT max(工资) FROM 人员信息表
SELECT * FROM 人员信息表 where 工资 > ( SELECT AVG(工资) FROM 人员信息表 )
SELECT count(工资) FROM 人员信息表 where 工资 > ( SELECT AVG(工资) FROM 人员信息表 )

二.多表查询

人员学历表:

ID 姓名 大学 专业
35009449 孙xx 油田职工大学 采油工程
35000149 吴x 石油大学(函授) 采油工程
35000269 魏xx 东北大学(函) 机电一体化
35000281 苏xx 浙江工学院 管理工程
35002528 姜xx 山东省委党校 经济管理
35002560 房xx 省交通专科学校 汽车运输管理
35002566 刘x 交通部中等专业学 汽车运输
35002584 贾x秋 山东教育学院 教育管理
35002635 李x 山东广播电视大学 管理工程
35002680 李x庆 山东大学 行政管理
35001025 王国x 石油大学 石油加工
35001123 刘x忠 胜利油田石油学校 采油工程
35001448 樊ss 山东省委党校 经济管理
35001787 李as *党校 历史
35001790 王zxc *党校函院 经济管理
35002049 张da 西安石油学院 矿机
35002089 赵asd 石油大学 石油加工
35002223 韩zz 胜利石油学校 采油工程
35002237 李! 石油大学 石油储运
35002258 许=z 石油大学 石油储运
注意:为了本表格仅用于学习SQL语法为目的,请勿非法使用,后果自负!      

1. 基本功

[root@BenLam-vm_0 ~]# Mysql>

SELECT * FROM 人员信息表, 人员学历表 WHERE (岗位工资>8999 AND 人员信息表.id=人员学历表.id)

SELECT * FROM 人员信息表,人员学历表 WHERE 人员信息表.性别='女' AND (人员信息表.id=人员学历表.id)

SELECT * FROM 人员信息表,人员学历表 where (人员信息表.姓名='孙xx' or 人员学历表.姓名='吴x') AND (人员信息表.id=人员学历表.id)

# TRUE \ FALSE 查询

SELECT * FROM 人员信息表 WHERE 工会 = TRUE
/* 或者通过“ -1 ”表示 */
SELECT * FROM 人员信息表 WHERE 工会 = -1 SELECT * FROM 人员信息表 WHERE 工会 = FALSE
/* 或者通过“ 0 ”表示 */
SELECT * FROM 人员信息表 WHERE 工会 = 0 /* 随机取 5 条记录 */
SELECT * FROM tb_user ORDER BY RAND() LIMIT 5

2. 嵌套功

[root@BenLam-vm_0 ~]# Mysql>

SELECT * FROM 人员信息表 WHERE ID IN(SELECT ID FROM 人员信息表 WHERE 工资=9999)
SELECT * FROM 人员信息表 WHERE ID NOT IN(SELECT ID FROM 人员信息表 WHERE 工资=9999)
SELECT * FROM 人员信息表 WHERE id IN(SELECT id FROM 人员信息表 WHERE (工资>=7000 AND NOT(姓名 LIKE'孙%')))
SELECT * FROM 人员信息表 WHERE 工资标准=(SELECT 工资 FROM 人员信息表 WHERE 工资=9999) /* (工资<3000) AND (工资>6000) */
SELECT * FROM 人员信息表 WHERE 工资 BETWEEN 3000 AND 6000
SELECT * FROM 人员信息表 WHERE 工资 NOT BETWEEN 3000 AND 6000

三.高级成就

ID 姓名 性别 入职 婚否 学历 工资 工会
35009449 孙xx 1315011466 未婚 中专 3000 TRUE
35000149 吴x 1325011466 已婚 高中 6283 FALSE
35000269 魏xx 1395011466 已婚 技校 7374 TRUE
35000281 苏xx 1295011366 未婚 高中 7883 FALSE
35002528 姜xx 1295011363 已婚 大学 8902 TRUE
35002560 房xx 1295011216 已婚 中专 9268 TRUE
35002566 刘x 1295021366 已婚 中专 9999 FALSE
35002584 贾x秋 1235011366 已婚 初中 1626 TRUE

1. 时间查询-基本功

[root@BenLam-vm_0 ~]# Mysql>

/* 打印前 30 天,带时分秒 */
select date_sub(now(),interval 30 day) /* 打印前 30 天以前 */
select date_sub(date(now()),interval 30 day) /* 打印当前时间戳 */
select unix_timestamp(now()) /* 打印前 30 天以前时间戳 */
select select unix_timestamp(date_sub(now(), interval 30 day)) /* 指定一个查询区间 */
select * from 人员信息表 where 入职 >= unix_timestamp('2018-12-01 00:00:01') and 入职 <= unix_timestamp('2019-01-01 23:59:59') order by ID desc limit 10; /* 指定时间区间,并将时间戳转换成正常时间 */
select ID, from_unixtime(入职) from 人员信息表 where 入职 >= unix_timestamp('2018-12-01 00:00:01') and 入职 <= unix_timestamp('2019-01-01 23:59:59') order by ID desc limit 5; /* 结果:*/
| ID | 入职 |
|---|---|
| 35002584 | 2018-12-21 13:20:42 |
| 35000149 | 2018-12-12 13:10:42 | /* 查询接30天入职的人,并按照 ID 降序排序 */
select * from 人员信息表 where date_sub(curdate(),interval 30 day) <= from_unixtime( 入职 ) order by ID desc limit 10;

暂时未开放