mysql基础--基础查询、条件查询、排序查询

下面是我在B站尚硅谷学习mysql基础知识的笔记!记录学习的日子,加油!坚持!给自己加个油!
每行代码,我都自己敲了一遍,可以运行。

很多前辈都学习过这方面内容,发布不出来!!!改成转载才能发布出来,只是留作自己复习用的,有雷同的话十分荣幸!

使用的是sqlyog软件employees表练习,用来学习mysql语言还是很挺好用的!
练习表employees的链接在下面:

https://pan.baidu.com/s/1lkgNVvY6TnaX_Jz8Yxm7Qg
提取码:9cv9

基础查询

语法:select 查询列表 from 表名

特点

  1. 查询的结果集是一个虚拟表

  2. select 类似与System.out.println(打印内容);

    select 后面跟着的查询列表,可以由多个部分组成,中间用逗号隔开

    例如:select 字段1, 字段2, 表达式 from 表

  3. 执行顺序
    ①from 子句
    ②from 子句
    select first_name from employees; #首先会查询不在这个表,如果存在再去输出first_name字段

  4. 查询列表可以是:字段、表达式、常量、函数等

练习:

#进阶一:基础查询
#一、查询常量
SELECT 100;
#二、查询表达式
SELECT 100%3;
#三、查询单个字段
SELECT last_name FROM employees;
#也可以写成 SELECt last_name FROM `employees`;注意这不是单引号

#四、查询多个字段
SELECT last_name,email,job_id FROM employees;

#五、查询字段
SELECT * FROM employees;#一次查询所有,顺序为表中顺序
#当然也可以按照想要的顺序,类似与一次查询多个字段的语法,例如
/*
SELECT //建议关键字单独成一行,写成下面这种形式可读性较好
	`first_name`,
	`last_name`,
	`phone_number`,
	`email`,
	`job_id`,
 ...,
 FROM 
	emplyees;*/
#六、查询函数(调用函数、获取返回值)
SELECT DATABASE();
SELECT VERSION();
SELECT USER();

#七、起别名
#方式1  使用关键字 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;

#八、+的作用
#需求:查询first_name和last_name拼接的全名,最终其别名为姓 名
#方案1:使用+号,是错误的
SELECT first_name+last_nam AS "姓 名" FROM employees;#错误
#方案2:使用concat拼接函数
SELECT CONCAT(first_name,last_name)  AS "姓 名" FROM employees;
/*
Java中+的作用
1、加法作用
100+1.5
'a'+2
1.3+'2'
2、拼接符,其中一个参数为null,结果为null,至少有一个操作为字符串

mysql中+的作用
1、加法运算
①两个操作数都是数值型
②其中一个操作符为字符型
将字符型强制转换成数值型,如果无法转换,则直接当做0处理

'张无忌'+100
③其中一个操作数为null,null加什么都是null
null+100 null
null+null  null
*/

#九、dintinct的作用
#需求:查询员工涉及到的部门编号有哪些,不存在重复编号
SELECT DISYINCT department_id FROM employees;

#查看表结构
DESC employees;
SHOW COLUMNS FROM employees;

#测试
#1、下面语句是否可以执行成功
select last_name ,job_name,saraly as sal from employees; #可以
#2、下面语句是否可以成功执行
select * from employees;#可以
#3、找出下面语句中的错误
select employees_id,lat_name,salary*12 "ANNUAL SALARY" FROM employees;#对
#4、显示表department的结构,并查询其中的全部数据
DESC department FROM department;
SHOW COLUMNS FROM department;
SELECT * FROM department;
#5、显示出表employees中全部job_id(不能重复)
SELECT DISTINCT job_id FROM employees;

#6、显示出表employees的全部列,各个列之间用逗号隔开,列头显示OUT_PUT
SELECT CONCAT(employees_id,',',first_name,',',last_name,',',commission_pct) AS OUT_PUT
FROM employees;
/*
ifnull(表达式1,表达式2)
表达式1:可能为null的字段或表达式
表达式2:如果表达式1为null,则最终结果显示的值
功能:如果表达式1位null,则显示表达式2,否则显示表达式1
*/
SELECT commission_pct ,IFNULL(commission,'空') FROM employees;

条件查询

语法:
select 查询字段
from 表名
where 筛选条件

执行顺序:
第一步:from 子句
第二步:where 子句
第三步:select子句

select last_name,first_name from employees where salary>20000;

特点

  1. 按关系运算符表达式筛选
    关系运算符:> < >= <= = (!= <>)
    != <>都表示不等于,但是不推荐使用前者
  2. 按逻辑运算符 and or not 推荐使用
    && || !和上述的运算符作用相同但是不推荐使用
  3. 模糊查询
    like
    between and
    is null
#进阶二:条件查询
#按关系表达式筛选
#案例1:查询部门编号不是100的员工信息
SELECT *
FROM employees
WHERE depart_id <>100;

#案例2:查询工资<15000的姓名,工资
SELECT last_name , salary
FROM employees
WHERE salary<15000;

#二、按逻辑表达式筛选
#案例1:查询部门不是编号50~100之间员工姓名、部门编号、邮箱
#方法1:
SELECT last_name,department_id,email
FROM eemployees
WHERE depart_id >50 OR department_id<100;

#方法2
SELECT last_name,department_id,email
FROM eemployees
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);

#模糊查询
#1、like
/*
一般和通配符搭配,对字符型数据进行部分匹配查询
常见的通配符:
_任意当字符
%任意多个字符,支持0~多个
*/
#案例1:查询姓名中包含字符a的员工信息
SELECT * 
FROM employees
WHERE last_name LIKE '%a%';

#案例2:查询姓名中包含最后一个字符为e的员工信息
SELECT *
FROM employees
WHERE last_name '%e';

#案例2:查询姓名中包含第一个字符为e的员工信息
SELECT *
FROM employees
WHERE last_name 'e%';

#案例4 :查询姓名中包含第三个字符为x的员工信息
SELECT *
FROM employees
WHERE last_name "__x%";

#案例5:查询姓名中包含第二个字符为_的字符
SELECT *
FROM employees
WHERE last_name "_/_%";

SELECT *
FROM employees
WHERE last_name LIKE '_$_%' ESCAPE '$';

#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
/*
判断某个字段的值是否处于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,0))AS 年薪
FROM employees
WHERE salary*12*(1+IFNULL(commission_pct,0)) <100000 OR salary*12*(1+IFNULL(commission_pct,0))>200000;
#方式2:
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
#案例1:查询没有奖金的员工信息
SELECT *
FROM employees
#WHERE commission_pct = NULL;错误,不能使用=
WHERE commission IS NULL;

#案例2:查询有奖金的员工信息
SELECT *
FROM employees
WHERE commission IS NOT NULL;

#=只能判断普通内容
#IS 只能判断NULL值

SELECT *
FROM employees
WHERE IS 10000; #这段sql是错误的,IS 只能判断NULL值

#<=>   安全等于,既能判断普通内容,又能判断NULL值
SELECT *
FROM employees
WHERE <=> 10000;

SELECT *
FROM employees
WHERE commission_pct <=> NULL;

#条件查询作业
#1、查询工资大于12000的员工姓名和工资
SELECT last_name,salary
FROM employees
WHERE salary>12000;
#2、查询员工号为176的员工的姓名和部门号和年薪
SELECT last_name,department_id ,salary*12*(1+IFNULL(commission,0)) AS "年薪" 
FROM employees
WHERE employee_id=176;
#3、选择工资不在5000到12000的员工的姓名和工资
SELECT last_name,salary
FROM employees
WHERE salary NOT BETWEEN 5000 AND 12000;
#4、选择在20或50号部门工作的员工姓名和部门号
SELECT last_name ,department_id
FROM employees
WHERE department_id IN (20,50);
#5、选择公司中没有管理者的员工姓名及job_id
SELECT last_name,job_id
FROM employees
WHERE manager_id IS NULL;
#6、选择公司中有奖金的员工姓名,工资和奖金级别
SELECT last_name ,salary,commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;
#7、选择员工姓名中第三个字母是a的员工
SELECT last_name
FROM employees
WHERE last_name LIKE '__a%';
#8、选择姓名中有字母a和e的员工姓名
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%' AND last_name LIKE '%e%';
#9、显示出表employees表中first_name以'e'结尾的员工信息
SELECT *
FROM employees
WHERE first_name LIKE '%e';
#10、显示出表employees部门编号在80-100之间的姓名、职位
SELECT last_name,job_id
FROM employees
WHERE department_id BETWEEN 80 AND 100;
#11、显示出表employees的manager_id是100,101,110的员工姓名和职位
SELECT last_name,job_id
FROM employees
WHERE manager_id IN(100,101,110);

排序查询

语法:
select 查询列表
from 表名
where 筛选条件 可选
order by排序列表

执行顺序:
from 子句
where子句
select子句
order by子句

特点:

  1. 排序列表可以是单个字段、多个字段、表示式、函数、列数,以及以上组合
  2. 升序,通过asc,默认行为, 降序,通过desc
#进阶三: 排序查询
#按单个字段排序
#案例1:将员工编号>120的员工信息进行工资的升序
SELECT * 
FROM employees 
WHERE employee_id>120 
ORDER BY salary ASC;
#案例1:将员工编号>120的员工信息进行工资的降序
SELECT * 
FROM employees 
WHERE employee_id>120 
ORDER BY salary DESC;

作业练习

#一,按表达式排序
#对有奖金的员工按年薪降序
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM employees
WHERE commission_pct
ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;

#二,按别名排序
#对有奖金的员工按年薪降序
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM employees
WHERE commission_pct
ORDER BY 年薪 DESC;

#三、按函数的结果排序
#案例1:按姓名的字数长度进行排序
SELECT LENGTH(last_name),last_name
FROM employees
ORDER BY LENGTH(last_name);
#四、按照多个字段排序
#案例1:查询员工的姓名、工资、部门编号,先按工资升序,再按部门降序

SELECT last_name,salary,department_id
FROM employees
ORDER BY salary ASC,department_id DESC;

#五、按列数排序
SELECT *
FROM employees
ORDER BY 2;#按第二列排序

ps:不积跬步无以至千里,近来最让我感动还是黄博士那篇博士论文的致谢,我没有他那样的体验写不出那般诗一样的致谢,平淡中透露着自强不息,致敬!“把书念下去,然后做出去,始终笃信读书改变命运”。话多了。。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值