目录
一、MySQL的命令
1、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
2、DQL语言
DQL(Data Query Language):数据查询语言
① 基础查询:
SELECT 查询的字段
FROM 表名
② 条件查询
SELECT 查询的字段
FROM 表名
WHERE 条件
条件表达式
示例:salary>10000
条件运算符:
< >= <= = != <>逻辑表达式
示例:salary>10000 && salary<20000
逻辑运算符:
and(&&):两个条件如果同时成立,结果为true,否则为false
or(||):两个条件只要有一个成立,结果为true,否则为false
not(!):如果条件成立,则not后为false,否则为true模糊查询
示例:last_name like ‘a%’
':用于包裹搜索条件
%:用于代替任意数目的任意字符
_:用于代替一个任意字符
\:转义符号
注意:上述符号如果作为查询条件则需要进行转义。排序查询
语法:
SELECT 条件
FROM 表明
WHERE 条件
ORDER BY 排序的字段|表达式|函数|别名 【asc|desc】
分组查询
SELECT 条件
FROM 表明
WHERE 条件
GROUP BY 分组字段
特点:
1、可以按单个字段分组
2、和分组函数一同查询的字段最好是分组后的字段
3、分组筛选
针对的表 位置 关键字
分组前筛选: 原始表 group by的前面 where
分组后筛选: 分组后的结果集 group by的后面 having
4、可以按多个字段分组,字段之间用逗号隔开
5、可以支持排序
6、having后可以支持别名多表连查
笛卡尔乘积:如果连接条件省略或无效则会出现
解决办法:添加上连接条件
- 传统模式下的连接 :等值连接——非等值连接
等值连接的结果 = 多个表的交集
n表连接,至少需要n-1个连接条件
多个表不分主次,没有顺序要求
一般为表起别名,提高阅读性和性能- 通过join关键字实现连接
等值连接、非等值连接 (内连接)
外连接
交叉连接
语法:
SELECT 查询字段
FROM 表1
[ INNER | LEFT OUTER | RIGHT OUTER | CROSS ]JOIN 表2 ON 连接条件
[ INNER | LEFT OUTER | RIGHT OUTER | CROSS ]JOIN 表3 ON 连接条件
WHERE 条件
GROUP BY 分组字段
HAVING 分组后筛选条件
ORDER BY 排序字段或表达式
子查询
- 子查询都放在小括号内
- 子查询可以放在from后面、select后面、where后面、having后面,但一般放在条件的右侧
- 子查询优先于主查询执行,主查询使用了子查询的执行结果
- 子查询根据查询结果的行数不同分为以下两类:
① 单行子查询
结果集只有一行
一般搭配单行操作符使用:> < = <> >= <=
非法使用子查询的情况:
a、子查询的结果为一组值
b、子查询的结果为空
② 多行子查询
结果集有多行
一般搭配多行操作符使用:any、all、in、not in
in: 属于子查询结果中的任意一个就行
any和all往往可以用其他查询代替分页查询
语法:
SELECT 查询字段
FROM 表名
WHERE 条件
GROUP BY 分组字段
HAVING 分组后筛选
ORDER BY 排序字段
LIMIT [起始索引数,]每页条目
特点:
- 起始条目索引从0开始
- limit子句放在查询语句的最后
- 公式:select * from 表 limit (page-1)*sizePerPage,sizePerPage
假如: 每页显示条目数sizePerPage 要显示的页数 page联合查询
SELECT 字段|常量|表达式|函数 【FROM 表】 【WHERE 条件】 UNION 【ALL】
SELECT 字段|常量|表达式|函数 【FROM 表】 【WHERE 条件】 UNION 【ALL】
SELECT 字段|常量|表达式|函数 【FROM 表】 【WHERE 条件】 UNION 【ALL】
.....
SELECT 字段|常量|表达式|函数 【FROM 表】 【WHERE 条件】
特点:
1、多条查询语句的查询的列数必须是一致的
2、多条查询语句的查询的列的类型几乎相同
3、union代表去重,union all代表不去重
③ 常用函数
字符函数
- concat:拼接
- substr:截取子串
- upper:转换成大写
- lower:转换成小写
- trim:去前后指定的空格和字符
- ltrim:去左边空格
- rtrim:去右边空格
- replace:替换
- lpad:左填充
- rpad:右填充
- instr:返回子串第一次出现的索引
- length:获取字节个数
数学函数
- round 四舍五入
- rand 随机数
- floor向下取整
- ceil向上取整
- mod取余
- truncate截断
日期函数
- now当前系统日期+时间
- curdate当前系统日期
- curtime当前系统时间
- str_to_date 将字符转换成日期
- date_format将日期转换成字符
流程控制函数
- if 处理双分支
- IFNULL(expr1,expr2):如果第一个参数 expr1 不为NULL则直接返回它,否则返回第二个参数 expr2。
- CASE
WHEN condition_1 THEN commands
WHEN condition_2 THEN commands
…
ELSE commands
END
分组函数
- sum 求和
- max 最大值
- min 最小值
- avg 平均值
- count 计数
其他函数
- version版本
- database当前库
- user当前连接用户
- NULLIF(expr1,expr2)
3、DML语言
① 插入
语法:
INSERT INTO 表名(字段名,...)
VALUES(字段值,...);
1、字段类型和值类型一致或兼容,而且一一对应
2、可以为空的字段,可以不用插入值,或用null填充
3、不可以为空的字段,必须插入值
4、字段个数和值的个数必须一致
5、字段可以省略,但默认所有字段,并且顺序和表中的存储顺序一致
② 更新
语法:
UPDATE 表名 SET 字段1=更新值1,字段2=更新值2...
[WHERE 条件]
修改多表的语法:
UPDATE 表名1 别名1,表明2 别名2
SET 别名.字段=更新值..
WHERE 连接条件
AND 筛选条件
③ 删除
方式一:DELETE
语法:
DELETE FROM 表名
[WHERE 筛选条件]
多表删除的语法:
DELETE 别名1,别名2
FROM 表名1 别名1,表名2 别名2
WHERE 连接条件
AND 筛选条件
方式二:TRUNCATE
语法:
TRUNCATE TABLE 表名
两种删除的区别:
1.truncate不能加where条件,而delete可以加where条件
2.truncate的效率高一丢丢
3.truncate 删除带自增长的列的表后,如果再插入数据,数据从1开始
delete 删除带自增长列的表后,如果再插入数据,数据从上一次的断点处开始
4.truncate删除不能回滚,delete删除可以回滚
4、DDL语言
① 对数据库的管理
1、创建库
create database 库名
2、删除库
drop database 库名
② 对表的管理
#1.创建表
CREATE TABLE IF NOT EXISTS stuinfo(
stuId INT,
stuName VARCHAR(20),
gender CHAR,
bornDate DATETIME);
#2.修改表 alter
语法:ALTER TABLE 表名 ADD|MODIFY|DROP|CHANGE COLUMN 字段名 【字段类型】;
#①修改字段名
ALTER TABLE studentinfo CHANGE COLUMN sex gender CHAR;
#②修改表名
ALTER TABLE stuinfo RENAME [TO] studentinfo;
#③修改字段类型和列级约束
ALTER TABLE studentinfo MODIFY COLUMN borndate DATE ;
#④添加字段
ALTER TABLE studentinfo ADD COLUMN email VARCHAR(20) first;
#⑤删除字段
ALTER TABLE studentinfo DROP COLUMN email;
#3.删除表
DROP TABLE [IF EXISTS] studentinfo;
③ 常见的约束
NOT NULL
DEFAULT
UNIQUE
CHECK
PRIMARY KEY
FOREIGN KEY