mysql_DQL语句及举例

基本的SELECT语句

MySQL中的sql语言大小写不敏感
sql语句可以写一行或多行
关键字不能分行或空格

基础查询
特点:

1、查询列表可以是:表中的字段、
常量值、表达式、函数
2、查询的结果是一个虚拟的表格

语法:

select 查询列表 from 表名;

单个查询

1.查询表中的单个字段

SELECT last_name FROM t_mysql_employees;

多个查询

2.查询表中的多个字段

SELECT last_name,salary,email FROM 
t_mysql_employees;

全部查询

3.查询表中的所有字段
查询全部字段分两种方式
一、这种效率比较高,一般在企业中还是用这种比较好。

SELECT 
    `employee_id`,
    `first_name`,
    `last_name`,
    `phone_number`,
    `last_name`,
    `job_id`,
    `phone_number`,
    `job_id`,
    `salary`,
    `commission_pct`,
    `manager_id`,
    `department_id`,
    `hiredate` 
FROM
    t_mysql_employees ;

二、这种就比较方便,平常我们自己做开发的话,可以用这种,但效率不如上一种。

 SELECT * FROM t_mysql_employees;

查询常量值,表达式

4.查询常量值,表达式
这种就是输出后面的数值或字符串,表达式的结果。

SELECT 100;#输出100
SELECT 'solar';#输出solar
SELECT 100%98;#输出2

起别名

5、起别名
起别名可以便于理解,如果要查询的字段有重名的情况,使用别名可以区分开来
有两种方式,如下:
一:使用as

SELECT 100%98 AS 结果;

SELECT last_name AS 姓,first_name AS 名 
FROM t_mysql_employees;

二:直接用空格隔开也可以达到同样的效果

SELECT last_name 姓,first_name 名 
FROM t_mysql_employees;

去重

6、去重
去掉表中的重复的部分,看起来更简单明了一些。
案例:查询员工表中涉及到的所有的部门编号

SELECT DISTINCT department_id 
FROM t_mysql_employees;

+号

7、+号的作用
在我们的java中,当两个操作数都为数值型时,+号就作为运算符;但只要有一个操作数为字符串的话,+号就会作为连接符;
但在MySQL中,+号仅仅是作为运算符,让我们来看看它在MySQL中的具体规则

形式作用举例
两个操作数都为数值型加减乘除select 100+90输出190
其中一方或全为字符型试图将字符型转换为数值型,如成功,则做运算select ‘12’+3;输出15
其中一方或全为字符型试图将字符型转换为数值型,如失败,则将字符型数值转换成0select ‘solar’+90;输出90
一方为null或全为null结果肯定为nullselect null+10; 输出null

那+号不做连接符了我们用什么连接呢?
连接函数CONCAT

SELECT CONCAT('a','b','c') AS 结果;
#输出abc

案例:查询员工名和姓连接成一个字段,并显示为 姓名

SELECT 
CONCAT(last_name,first_name) AS 姓名
FROM t_mysql_employees;

过滤与排序

1、过滤

使用WHERE子句,将不满足的数据过滤掉,在我们开发过程中比较常见。

分类常见运算符
按条件表达式筛选> < = != <> >= <=
按逻辑表达式筛选&& ! and or not 逻辑或
模糊查询like between and in is null

、按条件表达式筛选
查询工资>12000的员工信息

SELECT  * FROM t_mysql_employees
WHERE salary>12000;

查询部门编号不等于(<>不等于符号,!=也可以,推荐还是使用<>)90号的员工名和部门编号

SELECT  last_name, department_id
FROM t_mysql_employees
WHERE department_id<>90;

、按逻辑表达式筛选
查询工资z在10000到20000之间的员工名、工资以及奖金

SELECT last_name, salary, commission_pct
FROM t_mysql_employees
WHERE salary>=10000 AND salary<=20000;

查询部门编号不是在90到110之间,或者工资高于15000的员工信息

SELECT * FROM t_mysql_employees
WHERE NOT(department_id>=90 
AND  department_id<=110) OR salary>15000;

、模糊查询
通配符
% 任意多个字符,包含0个字符
_ 任意单个字符

1、like

查询员工名中包含字符a的员工信息

select * from t_mysql_employees
where last_name like '%a%';

查询员工名中第三个字符为n,第五个字符为l的员工名和工资

select last_name,salary FROM t_mysql_employees 
WHERE last_name LIKE '__n_l%';

查询员工名中第二个字符为_的员工名,这里涉及到一个关键字(ESCAPE)将它后面加的字符添加一个含义就是,取消它后面的特殊字符的效果。
所以这里美元后面的_符号就是单纯的_符号,而不代表任意一个字符,当然定义的这个字符可以不是美元符号,可以是其他任意一个字符。

SELECT  last_name FROM t_mysql_employees WHERE  last_name  LIKE  '_$_%'  ESCAPE  '$';

查询员工编号在100到120之间的员工信息
between and
使用它可以提高语句的简洁度
两个临界值不要调换顺序
一般

SELECT *  FROM t_mysql_employees WHERE employee_id <= 120 AND employee_id>=100;

使用between and


SELECT * FROM t_mysql_employees WHERE employee_id BETWEEN 100 AND 120;

in
判断某字段的值是否属于in列表中的某一项
in列表中不支持通配符
查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
一般:

SELECT last_name, job_id 
FROM t_mysql_employees
WHERE job_id = 'IT_PROT' 
OR job_id = 'AD_VP' 
OR JOB_ID ='AD_PRES';

使用in

SELECT last_name, job_id
FROM t_mysql_employees
WHERE job_id IN( 'IT_PROT' ,'AD_VP','AD_PRES');

is null
=或<>不能用于判断null值
is null或is not null 可以判断null值
但有一个特殊的等号,两种情况都适用:
<=>
举例:
查询没有奖金的员工名和奖金率
使用IS NULL

SELECT last_name, commission_pct
FROM t_mysql_employees
WHERE commission_pct IS NULL;

使用<=>

SELECT last_name, commission_pct
FROM t_mysql_employees
WHERE commission_pct <=> NULL;

查询有奖金的员工名和奖金率

SELECT last_name, commission_pct
FROM t_mysql_employees
WHERE commission_pct IS NOT NULL;

2、排序

order by 子句
一、asc代表的是升序,可以省略
desc代表的是降序
默认的是升序
二、order by子句可以支持 单个字段、别名、表达式、函数、多个字段
三、order by子句在查询语句的最后面,除了limit子句

举例
按单个字段排序

SELECT * FROM t_mysql_employees ORDER BY salary DESC;

查询部门编号>=90的员工信息,并按员工编号降序

SELECT *
FROM t_mysql_employees
WHERE department_id>=90
ORDER BY employee_id DESC;

查询员工信息 按年薪降序

SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM t_mysql_employees
ORDER BY 年薪 DESC;

计算长度
LENGTH
查询员工名,并且按名字的长度降序

SELECT LENGTH(last_name),last_name 
FROM t_mysql_employees
ORDER BY LENGTH(last_name) DESC;

分组查询

查询年薪的总和SUM

SELECT SUM(salary) FROM t_mysql_employees;

查询年薪的平均值AVG

SELECT AVG(salary) FROM t_mysql_employees;

查询年薪的最小值MIN

SELECT MIN(salary) FROM t_mysql_employees;

查询年薪的最大值MAX

SELECT MAX(salary) FROM t_mysql_employees;

查询发年薪的总个数COUNT

SELECT COUNT(salary) FROM t_mysql_employees;

综合:

SELECT SUM(salary),AVG(salary) 平均,MAX(salary) 最高,MIN(salary) 最低,COUNT(salary) 个数
FROM t_mysql_employees;

总结

希望我的博客可以帮到你,bài bài~
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值