Mysql
码农天地 -01、查询语法
-- 01、基本语法
SELECT DISTINCT <select_list>
FROM <left_table> <join_type> JOIN <right_table> ON <join_condition>
WHERE <where_condition>
GROUP BY <group_by_list>
HAVING <having_condition>
ORDER BY <order_by_condition>
LIMIT <limit_number>
-- 02、字段含义
FROM:需要从哪个数据表检索数据
JOIN:联合多表查询返回记录时,并生成一张临时表
ON:在生成临时表时使用的条件
WHERE:过滤表中数据的条件
GROUP BY:如何将上面过滤出的数据分组
HAVING:对上面已经分组的数据进行过滤的条件
SELECT:查看结果集中的哪个列,或列的计算结果
ORDER BY:按照什么样的顺序来查看返回的数据
LIMIT:限制查询结果返回的数量
-- 03、执行顺序
FROM → JOIN → ON → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT
02、基本操作-- 01、查询当前DBMS中所有的DB
SHOW DATABASES;
-- 02、进入指定的DB
USE 数据库名;
-- 03、查看当前DB中的所有table
SHOW TABLES;
-- 04、在当前DB中查看指定DB中的所有table
SHOW TABLES FROM 数据库名;
-- 05、查看table的结构
DESC 表名;
-- 06、查看MySQL服务器的版本
SELECT version();
03、查询列表-- 01、查询常量
SELECT 100;
-- 02、查询字段
SELECT last_name, email, employee_id FROM employees;
-- 03、查询表达式
SELECT 100 % 3;
-- 04、查询函数
SELECT vesion();
04、字段别名-- 方式一:使用AS关键字
SELECT USER() AS "用户名";
SELECT USER() AS '用户名';
SELECT USER() AS 用户名;
-- 方式二:使用空格
SELECT USER() 用户名;
SELECT USER() "用户名";
SELECT USER() '用户名';
05、字段去重-- DISTINCT关键字的作用是针对查询结果去除重复列
-- 需求:查询员工涉及到的部门编号有哪些
SELECT DISTINCT department_id FROM employees;
06、加号作用mysql中 "+" 的作用(加法运算):
①两个操作数都是数值型:
100 + 1.5 ==> 101.5;
②其中一个操作数为字符型:
将字符型数据强制转换成数值型,如果无法转换,则直接当做0处理:'张无忌' + 100 ==> 100
③其中一个操作数为null:
null + null ==> null
null + 100 ==> null
07、过滤筛选/*
1、关系运算
>
<
>=
<=
=
<>
注意:
= 只能判断普通的内容
IS 只能判断NULL值
<=> 安全等于,既能判断普通内容,又能判断NULL值
2、逻辑运算
AND
OR
NOT
3、模糊查询
LIKE
BETWEEN AND
IN
NOT IN
IS NULL
IS NOT NULL
*/
----------------------------------------关系运算案例----------------------------------------
-- 案例1:查询工资小于15000的员工信息:姓名与工资。
SELECT last_name, salary
FROM employees
WHERE salary < 15000;
-- 案例2:查询部门编号不是100的员工信息。
SELECT *
FROM employees
WHERE employee_id <> 100;
----------------------------------------逻辑运算案例----------------------------------------
-- 案例1:查询部门编号不是50到100之间的员工信息:姓名、部门编号、邮箱。
-- 方式1:
SELECT last_name, department_id, email
FROM employees
WHERE department_id < 50 OR department_id > 100;
-- 方式2:
SELECT last_name, department_id, email
FROM employees
WHERE NOT (department_id >= 50 AND department_id <= 100);
-- 案例2:查询奖金率大于0.03或者员工编号在60到110之间的员工信息。
SELECT *
FROM employees
WHERE commission_pct > 0.03 OR (employee_id >= 60 AND employee_id <= 110);
----------------------------------------模糊查询案例----------------------------------------
--------------------LIKE/NOT LIKE--------------------
/*
LIKE/NOT LIKE
功能:一般和通配符搭配使用,对字符型数据进行部分匹配查询
常见的通配符:
_ 任意单个字符
% 任意多个字符,支持0-多个
*/
-- 案例1:查询姓名中包含字符a的员工信息。
SELECT *
FROM employees
WHERE last_name LIKE '%a%';
-- 案例2:查询姓名中包含最后一个字符为e的员工信息。
SELECT *
FROM employees
WHERE last_name LIKE '%e';
-- 案例3:查询姓名中包含第一个字符为e的员工信息。
SELECT *
FROM employees
WHERE last_name LIKE 'e%';
-- 案例4:查询姓名中包含第三个字符为x的员工信息。
SELECT *
FROM employees
WHERE last_name LIKE '__x%';
-- 案例5:查询姓名中包含第二个字符为_的员工信息。
SELECT *
FROM employees
WHERE last_name LIKE '_\_%';
--------------------IN/NOT IN--------------------
/*
IN/NOT IN
功能:查询某字段的值是否属于指定的列表之内
a IN (常量值1,常量值2,常量值3,...)
a NOT IN (常量值1,常量值2,常量值3,...)
*/
-- 案例1:查询部门编号是30/50/90的员工名、部门编号。
-- 方式1:
SELECT last_name,department_id
FROM employees
WHERE department_id IN (30,50,90);
-- 方式2:
SELECT last_name,department_id
FROM employees
WHERE department_id = 30
OR department_id = 50
OR department_id = 90;
-- 案例2:查询工种编号不是SH_CLERK或IT_PROG的员工信息。
-- 方式1:
SELECT *
FROM employees
WHERE job_id NOT IN('SH_CLERK','IT_PROG');
-- 方式2:
SELECT *
FROM employees
WHERE NOT(job_id ='SH_CLERK'
OR job_id = 'IT_PROG');
--------------------BETWEEN AND--------------------
/*
BETWEEN AND
功能:判断某个字段的值是否介于xx之间
between and
not between and
*/
-- 案例1:查询部门编号是30-90之间的部门编号、员工姓名。
-- 方式1:
SELECT department_id,last_name
FROM employees
WHERE department_id BETWEEN 30 AND 90;
-- 方式2:
SELECT department_id,last_name
FROM employees
WHERE department_id>=30 AND department_id<=90;
-- 案例2:查询年薪不是100000-200000之间的员工姓名、工资、年薪。
-- 方式1:
SELECT last_name,salary,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
WHERE salary*12*(1+IFNULL(commission_pct,0)) NOT BETWEEN 100000 AND 200000;
-- 方式2:
SELECT last_name,salary,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
WHERE salary*12*(1+IFNULL(commission_pct,0))<100000 OR salary*12*(1+IFNULL(commission_pct,0))>200000;
--------------------IS NULL/IS NOT NULL--------------------
/*
IS NULL/IS NOT NULL
功能:判断某个字段的值是否为空/非空
*/
-- 案例1:查询没有奖金的员工信息。
SELECT *
FROM employees
WHERE commission_pct IS NULL;
-- 案例2:查询有奖金的员工信息。
SELECT *
FROM employees
WHERE commission_pct IS NOT NULL;
-- 案例3:查询工资为10000的员工信息。
SELECT *
FROM employees
WHERE salary IS 10000;
特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。