Bootstrap

mysql

一。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;

;