一。SQL
Structured Query Language
1.1 DDL
CREATE
1.2 DML
INSERT, DELETE, UPDATE
1.3 DQL
数据查询语言
1.4 INSERT
1. INSERT INTO 表名 VALUES(值1,值2....) ; 与表中的字段1 -1 对应
2. INSERT INTO 表名(字段1, 字段2....) VALUES(值1,值2....) ; ///与列出的字段对应(推荐)
3. INSERT INTO 表名(字段1, 字段2....) SELECT 字段1, 字段2.... FROM 表名,多行数据产生
1.5 DELETE
DELETE FROM 表名 WHERE 查询条件
1. 清空表
2. DELETE-->日志: 删除慢,安全, 1~ 10 对自增长无影响
3. TRUNCATE
1.6 UPDATE
UPDATE 表名 SET 字段=数据 1,....WHER
二.DQL(单表)
1.全查询
别名 (AS) 别名
1.1 差字段
SELECT 字段1 (AS) 别名 , 字段2 (AS) 别名 ... FROM 表名
1.2 通配符
*- 所有字段
优点: 方便, 性能较差
SELECT * FROM emp_tab;
2.条件查询
根据字段的条件进行查询
SELECT * FROM 表 WHERE 条件
2.1 比较
=, > , < , >= , <= , != , <>
数值可以使用单引号
SELECT * FROM emp_tab WHERE emp_name='冯正阳';
SELECT * FROM emp_tab WHERE emp_gender='男';
SELECT * FROM emp_tab WHERE emp_exp <=3;
2.2 逻辑
AND
OR
SELECT * FROM emp_tab WHERE emp_exp >=3 AND emp_exp<
找出工资在5000以上,性别为女的所有在职员工
SELECT * FROM emp_tab WHERE emp_gender='女' AND emp_sal>=5000.00 AND emp_status='在职';
2.3 日期
日期可以比较 ,日期格式 使用单引号
SELECT * FROM emp_tab WHERE emp_hiredate <'2024-01-01;
2.4 不等于
!=
<>
SELECT * FROM emp_tab WHERE emp_gender <>'女';
2.5 查询(Null/N/A)
当前数据 没有填写
IS NULL
IS NOT NULL
SELECT * FROM emp_tab WHERE emp_manager IS NOT NULL;
1. 找出没有填写家庭的工资在5000~20000之间的非女性员工。
2. 找出2024-01-01之前入职工作经验大于3年的员工,将其工资提升
SELECT * FROM emp_tab WHERE
emp_sal >=5000.00 AND emp_sal <=20000.00 AND emp_gender <>'女' AND emp_address is NULL;
2.6 在两者之间
BETWEEN ... AND
SELECT * FROM emp_tab WHERE emp_sal BETWEEN 5000.00 AND 20000.0;
用户登录
用户名 AND 密码 OR 1='1
2.7 模糊查询
% --任意字符,任意个
_ : 任意一个
。。。。 WHERE 字段 LIKE '表达
2.7.1 王xxx
前缀有王
王x, 王xxx
2.7.2 xx王
后缀王
2.7.3 x王x
任意位置
SELECT * FROM emp_tab WHERE emp_name LIKE '王%';
SELECT * FROM emp_tab WHERE emp_name LIKE '%王';
SELECT * FROM emp_tab WHERE emp_name LIKE '%王%';
SELECT * FROM emp_tab WHERE emp_name LIKE '王___';
2.8 结果排序
SELECT *
FROM 表名
WHERE 条件
ORDER BY 字段 DESC/(ASC) 默认升序
SELECT * FROM emp_tab ORDER BY emp_sal;
SELECT * FROM emp_tab ORDER BY emp_sal DESC;
2.9 分页
选取某些行
SELECT *
FROM 表名
WHERE 条件
ORDER BY 字段 DESC/(ASC) 默认升序
LIMIT m, n
SELECT * FROM emp_tab ORDER BY emp_sal DESC,emp_hiredate DESC ;
2.10 统计
数据统计,统计函数
SUM()
AVG()
MAX()
MIN()
COUNT();
2.11 去重
SELECT DISTINCT emp_dept FROM emp_tab;
2.12 GROUP
GROUP BY 字段(统计函数)
HAVING 对group结果
三.SQL
3.1 IN
IN (a, b,c)
进行条件选择
SELECT * FROM emp_tab WHERE emp_address IN ('陕西西安','陕西榆林');
3.2 字符串函数
SELECT SUBSTR(emp_address,3,1) 员工常用地址 FROM emp_tab
WHERE emp_address IS NOT NULL;
SELECT CONCAT(SUBSTR(emp_address,3,2),'市') 员工常用地址 FROM emp_tab
WHERE emp_address IS NOT NULL;
3.3 数学函数
3.4 case ... when ... else end
case when
条件
then 结果1
else 结果2
end;
SELECT
emp_name,
CASE
WHEN emp_gender = '男' THEN
'男士' ELSE '女士'
END '性别'
FROM
emp_tab;
SELECT
emp_name 姓名,
CASE
WHEN emp_manager IS NULL THEN
'经理' ELSE '员工'
END '职位',
CASE
WHEN emp_sal >= 5000 THEN
'高工资'
WHEN emp_sal >= 2000 THEN
'中等户' ELSE '贫困户'
END '工资比较'
FROM
emp_tab;
四.高阶查询
4.1 SELECT
SELECT 明确的的(可计算的字段) (AS)别名
4.2 子查询
将查询结果当做条件进行再次查询。
又名嵌套查询
SELECT
*
FROM
emp_tab
WHERE
emp_sal = ( SELECT MAX( emp_sal ) FROM emp_tab );
4.3 join查询
4.3.1 左外连接
以员工表为左表
SELECT
e.emp_id,e.emp_name,
d.dept_name
FROM
emp_tab e
LEFT JOIN dept_tab d
ON e.emp_dept = d.dept_id;
以部门表为左表
SELECT
e.emp_id,e.emp_name,
d.dept_name
FROM
dept_tab d
LEFT JOIN emp_tab e
ON d.dept_id=e.emp_dept;
4.3.2 右外连接
保证右侧数据的完整性
SELECT
e.emp_id,e.emp_name,
d.dept_name
FROM
dept_tab d
LEFT JOIN emp_tab e
ON d.dept_id=e.emp_dept;
SELECT
e.emp_id, e.emp_name,e.emp_sal,
d.dept_name
FROM
emp_tab e,
dept_tab d
WHERE
e.emp_dept = d.dept_id ORDER BY e.emp_sal LIMIT 0,1
SELECT
e.emp_id,
e.emp_name,
e.emp_sal,
d.dept_name
FROM
emp_tab e
LEFT JOIN dept_tab d ON e.emp_dept = d.dept_id
WHERE
e.emp_dept IS NOT NULL
ORDER BY
e.emp_sal
LIMIT 0,
1;