一、为什么要学习数据库**
二、数据库的相关概念
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
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
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
show databases; 查看所有的数据库 use 库名; 打开指定 的库 show tables ; 显示库中的所有表 show tables from 库名;显示指定库中的所有表 create table 表名( 字段名 字段类型, 字段名 字段类型 ); 创建表 desc 表名; 查看指定表的结构 select * from 表名;显示表中的所有数据
进阶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;