MySQL学习笔记6
#进阶8:分页查询
/*
应用场景:当显示的数据一页显示不全,需要分页提交sql请求
语法:
select查询列表
from 表
【join type】表2
条件
limit offset,size;
offset 要显示条目起始索引 起始索引从0开始
size要显示的条目个数
特点:
limit放在查询语句最后
公式:
要显示的页数page ,每页的条码数size
select 查询列表
from表
limit,(page-1)*size,size;
*/
SELECT *FROM employees LIMIT 0,5;
# 案例2:查询第11条-第25条
SELECT *FROM employees LIMIT 10,15;
#案例3:有奖金的员工信息,并且工资较高的前10名显示出来
SELECT e.*,salary
FROM employees e
WHERE e.`commission_pct` IS NOT NULL
GROUP BY e.`employee_id`
ORDER BY salary DESC
LIMIT 0,10;
#进阶9 联合查询
/*
union :联合。合并。将多条查询语句的结果合并成一个结果
语法:
查询语句1
union
查询语句2
union
应用场景
要查询的结果来自多个表,且多个表没有直接的联合关系,但查询的信息一致
特点:
1、要求多条查询语句的列数一致
2、要求多条查询语句类型顺序一致
3、union关键字,默认去重,若不想去重union all
*/
#案例:查询部门标号》90或者邮箱包含啊的员工信息
SELECT * FROM employees WHERE email LIKE '%a%'
UNION
SELECT * FROM employees WHERE department_id>90;
#dml语言
/*
数据操作语言
插入:insert
修改:update
删除:delete
*/
#一、插入语句
/*
方式一、
语法:
insert into 表名(列名.....) values(值1,...)
*/
#1.插入的值的类型要与列的类型一致或兼容
INSERT INTO beauty (id,NAME ,sex,borndate,phone,photo,boyfriend_id)
VALUES ()
#2.不可以为null的列必须插入值,可以为null的列如何插入值 方法1,列名对应值为null,方法2.列名不写,对应值不写
INSERT INTO beauty (id,NAME ,sex,borndate,phone,photo,boyfriend_id)
VALUES ()
#3.列的顺序可以调换,值必须对应
#4.列的个数与值必须对应一致
#5.可以省略列名,默认所有列,而且插入值的顺序和表中列的顺序一致
#方式二、
/*
语法:
insert into 表名
set 列名=值,
...
*/
#两种方式比较
/*1、方式一支持多行,方式二不支持
insert into beauty values (),(),();
2、方式一支持子查询,方式二不支持
insert into 表名(列名)
select 列名对应的数值;
#二、修改语句
/*
1、修改单表的记录
语法:
update 表名
set 列=新值,列=新值....
where 筛选条件;
2、修改多表的记录
语法:
update 表1 别名,表2 别名
set 列=值....
where连接条件 and筛选条件;
sql99语法
update 表名1 别名
inner left right join 表2 别名
on 连接条件
set 列=值,...
where 筛选条件
*/
#三删除语句
/*
方式一;delete
语法:
1、单表的删除
delete from 表名 where 筛选条件
2、多表删除
sql92语法:
delete 别名
from 表1 别名,表2 别名
方式二:
语法:truncate table 表名;
*/
#delete 与 truncate 比较
/*
1、delete删除可以加where条件truncate不行
2、truncate删除,效率比delete高
3、假如要删除的表中有自增长列;
如果用delete删除后,在插入数据,自增长列的值从断点开始
而truncate删除后,再插入数据自增长的列从1开始
4、truncate删除没有返回值
5、truncate 删除不能回滚,delete删除可以回滚
*/
#方式二:
TRUNCATE TABLE boys;
#ddl
/*
数据定义语言
库和表的管理
一、库的管理
创建、修改、删除
二、表的管理
创建 修改 删除
创建create
修改alter
删除drop
*/
#一、库的管理
#1、库的创建
/*
语法
create database (if not exists) 库名:
(如果库存在不创建,不存在则创建)
*/
CREATE DATABASE IF EXISTS books;
#2、库的修改
/*更改库的字符集*/
ALTER DATABASE books CHARACTER SET gbk;
#3、库的删除
DROP DATABASE IF EXISTS books;
#二、表的管理
#1、表的创建
/*
create table表名:(
列名 列的类型 【(长度)约束】中括号内可选,
列名 列的类型 【(长度)约束】中括号内可选,
)
*/
CREATE DATABASE books;
#案例:创建book
CREATE TABLE book(
id INT,
bname VARCHAR(20),
price DOUBLE,
authorid INT,
publishDate DATETIME
);
CREATE TABLE author(
id INT,
au_name VARCHAR(20),
nation VARCHAR(20)
);
#2、表的修改
/*
alter table 表名 add | drop |modify|change column 列名 类型 约束
*/
#1.列名
ALTER TABLE book CHANGE COLUMN publishDate pubDate DATETIME;
#2.类型或约束
ALTER TABLE book MODIFY COLUMN pubDate TIMESTAMP;
DESC book;
#3.增加列
ALTER TABLE author ADD COLUMN annual DOUBLE;
#4.删除列
ALTER TABLE author DROP annual;
#5.修改表名
ALTER TABLE author RENAME TO name_author;
#3、表的删除
DROP TABLE IF EXISTS name_author;
SHOW TABLES;
#通用写法:
DROP DATABASE IF EXISTS 旧库名;
CREATE DATABASE 新库名;
DROP TABLE IF EXISTS 旧表名;
CREATE TABLE 新表名;
#4、表的复制
DESC author;
DESC book;
INSERT INTO author VALUES
(1,'aa','bb'),
(2,'cc','dd'),
(3,'ee','ff');
#1 仅仅复制表的结构
CREATE TABLE copy LIKE author;
#2 复制表达结构+数据
CREATE TABLE copy2
SELECT * FROM author;
#3 只复制部分数据
CREATE TABLE copy3
SELECT * FROM author
WHERE nation = 'bb';
SELECT * FROM copy3;
#4 只复制部分结构
CREATE TABLE copy4 SELECT id ,au_name
FROM author
WHERE 1=2;
SELECT * FROM copy4;
#常见的数据类型
/*
数值型:
整形
小数:
定点数
浮点数
字符型:
较短的文本:char varchar
较长的文本:text blob(较长的二进制数据)
日期型:
*/
#一、整形
#整形类型
/*
tinyint 字节1 有符号 -128~127 无符号0-255
smallint 字节2 2的16幂
分类:
tinyint smallint mediumint int bigint
1、特点:
1.如果不设置无符号,爱好是有符号,默认是有符号,想设置加unsigned
2.如果插入数据超出临界范围,会显示临界值
3.如果不设置长度,会有默认长度
长度代表了显示的最大宽度,如果不够会用0填充,但必须搭配zerofill使用
*/
#1、如何设置无符号和有符号
DROP TABLE IF EXISTS tab_int;
CREATE TABLE tab_int(
t1 INT,
t2 INT UNSIGNED
);
INSERT INTO tab_int VALUES(-222222,22222222);
DESC tab_int;
SELECT * FROM tab_int;
#二、小数
/*
浮点型
float(M,D)
double(M,D)
定点型
dec(M,D)
特点:
1.M和D
M代表整数部位加小数部位长度,D代表小数点后保留位数,超出范围插入临界值。
2.M和D都可以省略,
如果是dec型 M默认为10 D为0,如果是float和double,则Juin根据插入的数值精度来决定精度
3.定点型精确度较高,如果要求插入数值精度较高如货币运算等则考虑使用
*/
CREATE TABLE tab_float(
f1 FLOAT(5,2),
f2 DOUBLE(5,2),
f3 DEC(5,2)
);
INSERT INTO tab_float VALUES(123.456,123.456,123.456);
SELECT * FROM tab_float;
#原则
/*
所选择的类型越简单越好,能保存的数值越小越好
*/
#三、字符型
/*
较短的文本
char:固定长度
varchar:可变长度
其他 :
binary 和varbinary 较短二进制
enum 保存枚举
set保存集合
较长的文本:
text
blob
特点
char vchar(M)最大字符数,插入耗费空间大char
char 效率高 变化小使用 默认1
varchar效率低 变化大
*/
#四、日期型
/*
date 日期
year 年
time 时间
datetime 日期+时间
timestamp 日期+时间
特点:
字节 范围 时区等的影响
datetime 8 1000-9999 不受
timestamp 4 1970-2038 受
*/