【MYSQL 基础篇笔记】DQL——基础查询、条件查询、排序查询

本文主要介绍了MySQL中的基础查询、条件筛选和排序操作。首先,基础查询涉及使用`SELECT`从表中选择指定字段;其次,条件查询通过`WHERE`子句实现,支持多种关系和逻辑运算符,以及模糊匹配;最后,排序查询利用`ORDER BY`进行升序或降序排列。这些基本操作是数据库查询的核心内容。
摘要由CSDN通过智能技术生成

目录

一、基础查询——select 查询列表 from 表名;

二、条件查询——select 查询列表 from 表名 where 筛选条件

三、排序查询——select 查询列表 from 表名(where 筛选条件)order by排序列表


一、基础查询——select 查询列表 from 表名;

  • 查询的结果集是一个虚拟表
  • select后面跟的查询列表可以由多个部分组成,中间游逗号隔开,如:select 字段1,字段2,表达式 from 表
  • 执行顺序:from→select
  • 查询列表:字段、表达式、常量、函数等
#一、查询常量
select 100;

#二、查询表达式
select 100%3;

#三、查询单个字段
select `last_name` from `employees`;

#四、查询多个字段
select `last_name` ,`email`,`employee_id` from `employees`;

#五、查询表内所有的字段(字段顺序按表格顺序显示)
select * from `employees`;

#六、查询函数(调用函数,获取返回值)
select database();  #查询当前数据库
select user(); #查询当前用户

#七、起别名
#方式一 使用as
select user() as 用户名;
select user() as "用户名";
select user() as '用户名';

select last_name as "姓 名" from employees;

#方式二 用空格
select user()   用户名;
select user()   "用户名";
select user()   '用户名';
SELECT last_name  "姓 名" from employees;

#八、拼接函数(+号及concat函数运用)
#需求:查询first_name和last_name 拼接成全名,最终起全名为:姓 名

#concat 函数

select concat(first_name,last_name) as '姓 名' from employees;
#拼接时若多个字段中,有某个字段为null,则拼接结果为null,可用ifnull 函数改善
#ifnull(表达式1,表达式2)
#如果表达式1为null,则显示表达式2,否则显示表达式1

select ifnull(commission_pct,'空') from employees;

*/mysql中+的作用:加法运算
①两个操作数都是数值型   100+1.5
②其中一个操作数字为字符型  将字符型数字强制转化为数字型,如果无法转换则当做0处理
“小甜甜”+100=100
③其中一个数为null,最终结果为null
null+null=null
1+null=null

#九、distinct 使用(去重)
#需求:查询员工涉及的部门都有哪些
select distinct department_id from employees;

#十、查看表结构
desc employees;
show columns from employees;

二、条件查询——select 查询列表 from 表名 where 筛选条件

  • 执行顺序:from→where→select
  • 按关系表达式筛选,关系运算符:< , > , <= , >= ,= , <>(!=)
  • 按逻辑表达式筛选,逻辑运算符:and(与),or(或),not(非)
  • 模糊查询:like , in ,between and, is null 
#一、按关系表达式查询

#1.查询部门编号不是100的员工的信息
SELECT *
FROM employees
WHERE department_id <> 100;

#2.查询工资小于15000的员工姓名和工资
SELECT last_name,salary
FROM employees
WHERE salary<15000;

#二、按逻辑表达式筛选
#1.查询部门编号不是50-100之间的员工姓名、部门编号、邮箱
SELECT last_name,department_id,email
FROM employees
WHERE department_id<50 or department_id>100;

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<=100);

#三、模糊查询
#1. like子句  
*/一般和通配符搭配使用,对字符型数据进行部分匹配查询
常见的通配符:
_ 任意单个字符
% 任意多个字符
*/

#①查询姓名中包含字符a的员工信息
SELECT *
FROM employees
WHERE last_name like '%a%';

#②查询姓名最后一个字符为e的员工信息
SELECT *
FROM employees
WHERE last_name like '%e';

#③查询姓名第三个字符为x的员工信息
SELECT *
FROM employees
WHERE last_name like '__x%';

#③查询姓名第二个字符为_的员工信息
SELECT *
FROM employees
WHERE last_name like '_\_%';

#定义$为转义字符
SELECT *
FROM employees
WHERE last_name like '_$_%' escape'$';

#2. in子句、not in子句
#查询某字段的值是否属于指定的列表之内、是否不在指定的列表之内
#案例1,:查询部门编号是30、50、90的员工名和部门编号
SELECT last_name,department_id
FROM employees
WHERE department_id in (30,50,90)

SELECT last_name,department_id
FROM employees
WHERE department_id =30
OR department_id =50
OR department_id =90

#案例2:查询工种编号不是ST_CLERK或IT_PROG的员工信息
SELECT *
FROM employees
WHERE job_id NOT IN('ST_CLERK','IT_PROG');

SELECT *
FROM employees
WHERE NOT (job_id='ST_CLERK'
OR job_id='IT_PROG');

#3. BETWEEN AND
#判断某个字段是否介于指定值之间
#案例1:查询部门编号是30-90之间的部门编号、员工姓名
SELECT department_id,last_name
FROM employees
WHERE department_id BETWEEN 30 AND 90;

SELECT department_id,last_name
FROM employees
WHERE department_id>=30 AND department_id<=90;

#案例2:查询年薪不是100000-200000之间的员工姓名、工资、年薪
SELECT last_name,salary,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM employees
WHERE salary*12*(1+IFNULL(commission_pct,0)) NOT BETWEEN 100000 AND 200000;

#4. IS NULL /IS NOT NULL
#判断null值
#案例1:查询年终奖金率为空的员工信息
SELECT *
FROM employees
WHERE commission_pct IS NULL;

SELECT *
FROM employees
WHERE commission_pct <=>  NULL;

#  <=> 安全等于,既能判断普通内容,又能判断null值
#   =  只能判断普通内容

#案例2:查询年终奖金率不为空的员工信息
SELECT *
FROM employees
WHERE commission_pct IS NOT NULL;

三、排序查询——select 查询列表 from 表名(where 筛选条件)order by排序列表

  • 执行顺序:from→where→select→order by
  • 排序列表可以是单个字段、多个字段、表达式、函数、列数、以及以上的组合
  • 升序:asc(默认行为);降序:desc
#一、按单个字段排序
#案例1:将员工编号>120的员工信息进行工资的升序
SELECT * FROM employees WHERE employee_id>120 ORDER BY salary ASC;
SELECT * FROM employees WHERE employee_id>120 ORDER BY salary ;

#二、按表达式排序
#案例1:对有奖金的员工,按年薪排序
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
WHERE salary*12*(1+IFNULL(commission_pct,0)) IS NOT NULL
ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;

#三、按别名排序
#案例1:对有奖金的员工,按年薪排序
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY 年薪 DESC;

#四、按函数结果排序
#案例1:按姓名的字数长度进行升序
SELECT last_name
FROM employees
ORDER BY LENGTH(last_name);

#五、按多个字段排序
#案例1:查询员工姓名、工资、部门编号,按工资升序,按部门编号降序
SELECT last_name,salary,department_id
FROM employees
ORDER BY salary ,department_id DESC;

#六、按列数排序
#案例1:按表格的第2列数据降序排序
SELECT *
FROM employees
ORDER BY 2 DESC;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值