MySQL基础 一,基础查询,条件查询,排序查询

本单元目标

一、为什么要学习数据库**
二、数据库的相关概念
DBMS、DB、SQL
三、数据库存储数据的特点
四、初始MySQL
MySQL产品的介绍
MySQL产品的安装 ★
MySQL服务的启动和停止 ★
MySQL服务的登录和退出 ★
MySQL的常见命令和语法规范
五、DQL语言的学习
基础查询 ★
条件查询 ★
排序查询 ★
常见函数 ★
分组函数 ★
分组查询 ★
连接查询 ★
子查询 √
分页查询 ★
union联合查询 √

六、DML语言的学习
插入语句
修改语句
删除语句
七、DDL语言的学习
库和表的管理 √
常见数据类型介绍 √
常见约束 √
八、TCL语言的学习
事务和事务处理
九、视图的讲解
十、变量
十一、存储过程和函数
十二、流程控制结构

##数据库的好处
1.持久化数据到本地
2.可以实现结构化查询,方便管理

##数据库相关概念
1、DB:数据库,保存一组有组织的数据的容器
2、DBMS:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据
3、SQL:结构化查询语言,用于和DBMS通信的语言

##数据库存储数据的特点
1、将数据放到表中,表再放到库中
2、一个数据库中可以有多个表,每个表都有一个的名字,用来标识自己。表名具有唯一性。
3、表具有一些特性,这些特性定义了数据在表中如何存储,类似java中 “类”的设计。
4、表由列组成,我们也称为字段。所有表都是由一个或多个列组成的,每一列类似java 中的”属性”
5、表中的数据是按行存储的,每一行类似于java中的“对象”。

MySQL产品的介绍和安装

MySQL服务的启动和停止
方式一:计算机——右击管理——服务
方式二:通过管理员身份运行
net start 服务名(启动服务)
net stop 服务名(停止服务)

MySQL服务的登录和退出
方式一:通过mysql自带的客户端
只限于root用户

方式二:通过windows自带的客户端
登录:
mysql 【-h主机名 -P端口号 】-u用户名 -p密码

退出:
exit或ctrl+C

MySQL的常见命令

1.查看当前所有的数据库
show databases;
2.打开指定的库
use 库名
3.查看当前库的所有表
show tables;
4.查看其它库的所有表
show tables from 库名;
5.创建表
create table 表名(

列名 列类型,
列名 列类型,
。。。
);
6.查看表结构
desc 表名;
7.查看服务器的版本
方式一:登录到mysql服务端
select version();
方式二:没有登录到mysql服务端
mysql --version

mysql --V

MySQL的语法规范

1.不区分大小写,但建议关键字大写,表名、列名小写
2.每条命令最好用分号结尾
3.每条命令根据需要,可以进行缩进 或换行
4.注释
单行注释:#注释文字
单行注释:-- 注释文字
多行注释:/* 注释文字 */

###SQL的语言分类
DQL(Data Query Language):数据查询语言
select
DML(Data Manipulate Language):数据操作语言
insert 、update、delete
DDL(Data Define Languge):数据定义语言
create、drop、alter
TCL(Transaction Control Language):事务控制语言
commit、rollback

SQL的常见命令

show databases; 查看所有的数据库
use 库名; 打开指定 的库
show tables ; 显示库中的所有表
show tables from 库名;显示指定库中的所有表
create table 表名(
	字段名 字段类型,	
	字段名 字段类型
); 创建表

desc 表名; 查看指定表的结构
select * from 表名;显示表中的所有数据

DQL语言的学习

进阶1,基础查询
一,语法
select 查询列表
from 表名;
二、特点
1、查询列表可以是字段、常量、表达式、函数,也可以是多个
2、查询结果是一个虚拟表

三、示例
1、查询单个字段
select 字段名 from 表名;
2、查询多个字段
select 字段名,字段名 from 表名;
3、查询所有字段
select * from 表名
4、查询常量
select 常量值;
注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要
5、查询函数
select 函数名(实参列表);
6、查询表达式
select 100/1234;
7、起别名
①as
②空格
8、去重
select distinct 字段名 from 表名;

9、+
作用:做加法运算
select 数值+数值; 直接运算
select 字符+数值;先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算
select null+值;结果都为null

10、【补充】concat函数
功能:拼接字符
select concat(字符1,字符2,字符3,…);

11、【补充】ifnull函数
功能:判断某字段或表达式是否为null,如果为null 返回指定的值,否则返回原本的值
select ifnull(commission_pct,0) from employees;

12、【补充】isnull函数
功能:判断某字段或表达式是否为null,如果是,则返回1,否则返回0

进阶2,条件查询
一、语法
select 查询列表
from 表名
where 筛选条件

二、筛选条件的分类
1、简单条件运算符

< = <> != >= <= <=>安全等于
2、逻辑运算符
&& and
|| or
! not
3、模糊查询
like:一般搭配通配符使用,可以判断字符型或数值型
通配符:%任意多个字符,_任意单个字符

在这里插入图片描述
一,按条件表达式筛选

案例1:查询工资大于12000的员工信息

SELECT
	*
FROM
	`employees`
WHERE
	salary>12000;

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

SELECT 
	`last_name`,
	`department_id`
FROM
	`employees`
WHERE
	`department_id`<>90;

二,按照逻辑表达式筛选

案列1:查询工作z在10000到20000之间的员工名,工资以及奖金

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

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

SELECT
	*
FROM
	`employees`
WHERE
	`department_id`<90 OR `department_id`>110 OR `salary`>15000;

三,模糊查询

案列1:查询员工名字中包含字符a的员工信息

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

案列2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资

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

案列3:查询员工名字第二个字符为_的员工名

SELECT
	`last_name`
FROM
	`employees`
WHERE
	`last_name` LIKE '__%';

2,between and

案列1:查询员工编号在100至120之间的员工信息

SELECT
	*
FROM
	`employees`
WHERE
	`employee_id`>100 AND `employee_id`<120
#----------------------------------------------------
SELECT
	* 
FROM
	`employees`
WHERE
	`employee_id` BETWEEN 100 AND 120

3,in
含义:判断某字段的值是否属于in列表中的某一项
案列:查询员工的工种编号是 IT_PROG,AD_VP,AD_PRES中的一个员工名和工种

SELECT
	`last_name`,
	`job_id`
FROM
	`employees`
WHERE
	job_id IN (‘IT_PROT’,’AD_VP‘,’AD_PRES‘);

4,is null
案列1:查询没有奖金的员工和奖金率

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

案列1:查询有奖金的员工和奖金率

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`,
	`salary`
FROM
	`employees`
WHERE
	`salary`<=> 12000;

#is null pk <=>

IS NULL:仅仅可以判断NULL值,可读性较高
<=> :既可以判断NULL值,又可以判断普通的数值 可读性较低

2,查询员工号为176的员工的姓名和部门号和年薪

SELECT
	`last_name`,
	`department_id`,
	salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM
	`employees`

进阶3:排序查询

语法:
select
	要查询的东西
from
	表
where 
	条件

order by 排序的字段|表达式|函数|别名 【asc|desc】

案例1:查询员工信息,要求工资从高到低排序

#从高到低
SELECT * FROM `employees` ORDER BY salary DESC;
#从低到高
SELECT * FROM `employees` ORDER BY salary ASC;

注意:
1,asc代表的是升序,desc代表的是降序
如果不写,则默认是升序
案例2:查询部门编号>=90的员工信息,按入职时间的先后进行排序

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

案列3:按年薪的高低显示员工的信息和年薪(表达式排序)

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


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

案例5:按姓名的长度显示员工的姓名和工资(按函数排序)

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

案例6:查询员工信息,要求先按工资排序,再按员工编号排序

SELECT *
FROM `employees`
ORDER BY salary ASC,employee_id DESC;

测试
1.查询员工的姓名和部门号和年薪,按年薪降序按姓名升序,

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

2.选择工资不在8000到17000的员工的姓名和工资,按工资降序,

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

3.查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,再按部门号升序,

SELECT *,LENGTH(email)
FROM `employees`
WHERE email LIKE '%e%'
ORDER BY LENGTH(email) DESC,`department_id` ASC;