【mysql 基本语句 02】

前提:表信息

 一、DQL语言

1、基础查询

 进阶1、基础查询
/*
语法:
select  查询列表 from 表名;

类似于;sysyem.out.println(xxx);

特点:
1、查询列表可以是:表中的字段、常量值、表达式、函数
2、查询的结果是一个虚拟的表格
*/
 #!  细节注意
USE myemployees;


#1、查询表中单个字段

SELECT last_name FROM employees;

#2、查询表中多个字段

SELECT last_name,salary,email FROM employees;

#3、查询表中所有字段
  -- 方式一

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

-- 方式二

SELECT * FROM employees;

#4、查询常量值

SELECT 100;
SELECT 'join';

#5、查询表达式

SELECT 100*99;

#6、查询函数

SELECT VERSION();

# 7、起别名
/*
两种方式:
1、使用AS
2、使用空格
*/
#方式一:

SELECT last_name AS 姓,first_name ASFROM employees;

#方式二:

SELECT last_name 姓,first_name 名 FROM employees;

#案例:查询salary,显示结果为out put

SELECT salary AS 'out put' FROM employees;

#8、去重,关键字:distinct
# 案例:查询员工表中涉及到的所有的部门编号

SELECT DISTINCT  department_id FROM employees;

#9、加号的作用

java中加号的作用:1、运算符  2、连接符
mysql中的作用只有一个:运算符

SELECT 90+110; -->两个操作数都为数值型,则做加法运算操作
SELECT '90'+110;  -->其中一方为字符型,试图将字符型数值转换成数值型,如果转换成功
SELECT 'join'+110; --> 则继续做运算,如果转换不成功,则将字符型数值转变成0

SELECT NULL+110; --> 只要其中一方为null,则结果肯定为null

#10、拼接,关键字 concat

SELECT CONCAT(last_name,first_name) FROM employees;

#11、如果有一列字段为空,可以把为null的字段设定为0,关键字:ifnull

SELECT IFNULL(commission_pct,0) AS 奖金率, commission_pct FROM employees;

这条语句的意思是:commission_pct为空时显示为0,不为空时显示本身数值

进阶2、条件查询
语法:select
    查询列表
      from
    表名
      where
    筛选条件;
    
筛选条件分类:
    一、按条件表达式筛选
    条件运算符:> < = <> >= <=
    二、按逻辑表达式筛选
    逻辑运算符:
        &&  ||  !
        and or  not

    &&和and:两个条件都为true,结果为true,反之为false
        ||或or:只要有一个条件为true,结果为true,反之为false
        !或not:如果连接的条件本身为false,结果为true,反之为false
 三、模糊查询
        like 特点:1)一般和通配符搭配使用。"%"任意多个字符,包含0个字符;“_”任意单个字符
        between and
        in
        is null
#1、按条件表达式筛选
#案例1、查询工资>12000的员工信息

SELECT * FROM employees WHERE    salary>12000;

#案例2、查询部门编号不等于90号的员工名和部门编号

SELECT CONCAT(last_name,first_name) AS 姓名,department_id FROM employees WHERE department_id<>90;

#按逻辑表达式运算
#案例1:查询工资在10000到20000之间的员工名、工资以及奖金。

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

#案例2:查询部门编号不是在90到110之间,或者工资高于150000的员工信息

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

#模糊查询
#LIKE
#案例1、查询员工名中包含字符a的员工信息  --》这里的%代表的是通配符的意思

SELECT * FROM employees WHERE    last_name LIKE '%a%';

#案例2、查询员工名中第三个字符为n,第5个字符为l的员工名和工资

SELECT last_name,salary FROM employees WHERE last_name LIKE'__n_l%';

#案例3、查询员工名中第二个字符为_的员工名

SELECT last_name,salary FROM employees WHERE last_name LIKE'_\_%';  #  '_\_%'中\是转义的意思
SELECT last_name,salary FROM employees WHERE last_name LIKE'_$_%' ESCAPE '$';  #'_$_%' ESCAPE '$' 中$是指定的转义的字符,后面ESCAPE '$'指明$是转义的字符

#between and
/*
1) 包含临界值
2)两个临界值不能调换顺序
*/
#案例1、查询员工编号在100到120之间的员工信息

SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120;

#in :用于去判断某字段的值是否属于in列表中的某一项。in列表中字段不支持通配符
#案例1、查询员工的工种编号是IT_prog、AD_VP、AD_PRES中 的一个员工名和工种编号

SELECT last_name,job_id FROM employees WHERE job_id IN('IT_PROD','AD_VP','AD_PRES');

#is null:  is null 或is not null 可以判断null;=或<>不能判断null值
#案例1:查询没有奖金的员工名和奖金率

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

#安全等于 <=>
#案例1:查询没有奖金的员工名和奖金率

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

#案例2:查询工资为12000 的员工信息

SELECT last_name,commission_pct FROM employees WHERE commission_pct <=> 12000;

 #案例:查询员工号为176的员工姓名和部门号和年薪

SELECT last_name,department_id,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪 FROM employees;
last_name department_id 年薪
K_ing 90 288000.00
Kochhar 90 204000.00

#查询没有奖金,且工资小于18000的salary,last_name

SELECT salary,last_name,`commission_pct` FROM employees WHERE commission_pct IS NULL OR commission_pct = 0 AND salary<180000;

#进阶3:排序查询
/*
语法:
select 查询列表
from 表
[where筛选条件]
order by 排序列表 [asc|desc]

特点:
1、asc代表升序,desc代表降序,如果不写默认代表升序
2、order by 子句中可以支持单个字段,多个字段,表达式,函数,别名
3、order by 子句一般是放在查询语句的最后面,limit字句除外
*/

#案例:查询员工信息,要求工资从高到底

SELECT * FROM employees ORDER BY salary DESC;

#案例2、查询部门编号>=90的员工信息,按入职时间的先后进行排序

SELECT * FROM employees WHERE department_id>=90 ORDER BY hiredate;

#案例3、按年薪的高低显示员工的信息和年薪【按表达式排序】

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

#案例4、按姓名的长度显示员工的姓名和工资【按函数排序】

SELECT LENGTH(last_name) 字节长度,salary FROM employees ORDER BY LENGTH(last_name);

#案例5:查询员工信息,要求先按工资升序排序,在按员工编号降序排序【按多个字段排序】

SELECT * FROM employees ORDER BY salary ,department_id DESC; #表示先按salary升序排序,然后遇到salary有重复的在可以按照department_id降序排序

#案例6、选择工资不在8000到17000的员工姓名和工资,按工资降序

SELECT last_name,salary FROM employees WHERE NOT(salary BETWEEN 8000 AND 17000) ORDER BY salary DESC;

#案例7、查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,在按部门号升序

SELECT email,LENGTH(email)AS 邮箱长度,department_id FROM employees WHERE email LIKE '%e%' ORDER BY LENGTH(email) DESC,department_id;

 

posted @ 2021-03-12 15:23  尘封~~  阅读(93)  评论(0编辑  收藏  举报