数据库:
SQL:
DDL:
数据定义语言,主要对数据库,数据表,字段进行定义:
SHOW DATABASE ;
查询所有数据库
SELECT DATABASE() ;
查询当前数据库
创建数据库:
create database plus;
创建条件的加入:
create database if not exists plus;
------表示如果不存在则创建
create database if not exists sb default charset utf8mb4;
—表示创建一张sb表字符集为utf8mb4;
删除数据库:
drop database plus;
切换数据库:
use mybatis;
mybatis是数据库名
show tables
查看本数据库中的数据表
具体的创建表:
create table user( id int comment '编号', name varchar(50) comment '姓名', age int comment '年龄', gender varchar(20) comment '性别' ) comment '用户表';
注意最后一个字段没有逗号,而且给字段起名字的时候用的是英文单引号。
不然会创建失败。
查看表中的字段信息:
desc user;
查看详细字段信息:
show create table user;
注意databases,和database。
tables和table。
DDL
表的修改操作:
给表的添加字段:
alter table user add pwd varchar(50) comment '密码';
需要注意alter和alert,不一样.pwd是我想添加的字段名称。user是我想要修改的表名。
可以使用desc user查看字段。
修改:
alter table user change pwd password varchar(50) comment'密码';
修改字段名pwd为password,如果也想修改类型在我以上语句的基础上,把varchar(50)改成你想要的数据类型就好。
如果只想修改数据类型:
alter table user modify password int;
修改表名:
alter table user rename to tb_user;
user改为tb_user;
to前是
删除:
alter table user drop password;
删除表
drop table if exists user;
删除user表,if exists可以去掉;
清空数据:
truncate table user;
就是删除表并重新创建和原来一样的表。
注意我这里的user已经被删除了,所以他不可以再删除并创建和之前一样的标了。
一般借助提醒化界面工具提高开发效率
常用的有:sqlyog,navicat,dataGrip
我用的Navicat.
DML:
完成数据的增删改;
insert(增加
update(更新
delete(删除
1.给指定字段添加数据
insert into user (bookid,bookname,type,price) value (20,'花间酒','古风',40)
插入成功
2.给全部字段添加数据
INSERT INTO book VALUE (21,'人间月','古风',40)
插入成功:
3.批量添加数据
两种形式:
1:
INSERT INTO book VALUE (23,'匆匆那年','爱情',60),(22,'三生三世十里桃花','古风',50)
2:
INSERT INTO book (bookid,bookname,type,price) VALUE (24,'边城','爱情',60),(25,'古剑奇谭','古风',50)
修改数据:
UPDATE book SET bookname='特战荣耀',type='军事' WHERE bookid=17
注意,如果不带where条件,将改变整张表的此字段信息。
删除数据:
DELETE FROM book WHERE bookid = 16
注意,delete是删除整行,所以不能按字段删除,你可以使用update去修改指定字段的值。
如果不带where条件,那你讲删除表中的所有数据。
DQL
查询数据表记录。
SELECT字段列表
FROM表名列表
WHERE 条件列表
GROUP BY 分组字段列表
HAVING分组后条件列表
ORDER BY 排序字段列表
LIMIT分页参数
基本查询
根据字段查询:
SELECT bookid,bookname,type,price FROM book
查询所有:
SELECT *FROM book
设置别名
SELECT bookid,bookname,type AS book_type,price AS book_price FROM book
给type设置别名:book_type
给price设置别名:book_price
去除重复数据查询:DISTINCT
SELECT DISTINCT bookname,type,price from book
条件查询
SELECT 字段列表 FROM 表名 WHERE 条件列表
举几个例子:
第一个简单条件查询:
等于
SELECT * from book WHERE price=30
小于:
SELECT * from book WHERE price<50
小于等于:
SELECT * from book WHERE price<=50
查询没有类型的书籍信息:
is null
SELECT * from book WHERE type IS NULL
is not null:
SELECT * from book WHERE type IS NOT NULL
不等于:
两种写法:
SELECT * from book WHERE price<>50
SELECT * from book WHERE price!=50
复合条件查询:
SELECT * from book WHERE price<=100 && price>=50
SELECT * from book WHERE price<=100 and price>=50
SELECT * from book WHERE price between 50 and 100
or
SELECT * from book WHERE price =20 or price=50 OR price=100
还有另外一种写法:使用in关键字
SELECT* FROM book WHERE price in(20,50,100)
模糊匹配:
LIKE
SELECT * from book WHERE bookname LIKE '___'
表示查询书名为三个字的数据信息
SELECT * from book WHERE bookname LIKE '%我'
表示查询书名最后一个字为“我”的书籍信息
聚合函数
count-----统计数量
max------求最大值
min--------求最小值
avg--------平均值
sum--------求和
使用方法:
SELECT 聚合函数(字段列表)FROM 表名
具体使用:
SELECT * FROM book WHERE bookname LIKE'%间%'
SELECT COUNT(bookid) FROM book
SELECT AVG(price) FROM book
SELECT MAX(price) FROM book
SELECT MIN(price) FROM book
SELECT SUM(price) FROM book WHERE bookname LIKE '%间%'
最后一句表示模糊查询间的书籍,并求他们的价格综合
分组查询:GROUP BY
直接使用:
SELECT type, COUNT(*) FROM book GROUP BY type
根据书籍类型查询,每种类型有多少本书。
思路:
先分组写查询:
SELECT* FROM book GROUP BY type
再使用聚聚函数计算数量:
SELECT COUNT(*) FROM book GROUP BY type
这样得出的信息只有count一列,你并不知道他对应的是什么数据
所以type也参与查询
其他分组查询类似。
再举一个例子:
SELECT type,AVG(price),SUM(price)FROM book GROUP BY type
意思是根据类型分组,在分别对组的价值进行求品均值,求和。
一个比较复杂的查询:having
SELECT type,AVG(price),SUM(price)FROM book GROUP BY type HAVING AVG(price)<50
在之前的条件上加一个,要求分组内的价格平均值小于50.
where是对表中所有数据进行判断,having是根据组内条件判断. where不能对聚合函数进行判断,而having可以
排序查询 :oder by
SELECT * FROM book ORDER BY price ASC
根据价格进行升序排序
SELECT * FROM book ORDER BY price ASC,bookid DESC
根据价格进行升序排序,如果价格相同的情况下按照bookid进行降序排序。
分页查询:LIMIT
SELECT * FROM book LIMIT 10,10
表示查询第二页的10条数据
DQL语句的执行顺序
1.from
2.where
3.group by having
4.select
5.order by
6.limit
DCL
控制数据库的访问权限
函数
字符串函数
举个例子:
SELECT LOWER('HELLO')
//表示大写变小写
SELECT LPAD('01',5,'*')
//表示01左边添加若干个*到达5个字符
SELECT RPAD('02',5,'#')
//表示02右边添加若干个#到达五个字符
数值函数
举个例子:
SELECT LPAD(ROUND(RAND()*1000000,0),6,'0')
意思是生成6位随机数,验证码。
日期函数
举个例子:
SELECT name ,DATEDIFF(CURDATE(),entrydate) FROM emp
意思是查询员工工作了多少时间,curdate()是当前日期,entrydate是入职日期的字段使用datediff进行相减得到工作时间。
流程控制函数
例子:
SELECT id,name, (CASE WHEN math >=85 THEN '优秀' WHEN math>=60 THEN '及格' ELSE '不及格' END)AS '数学' FROM stu
意思是查询stu表,返回
分数>=85为优秀,
分数>60为及格
其余为不及格。
约束
约束是作用于表的字段上的。为的是保证数据完整性。
建立外键:
ALTER TABLE emp add CONSTRAINT fk_emp_dept_id FOREIGN KEY (dept_id) REFERENCES dept(id)
删除外键:
ALTER TABLE emp drop FOREIGN KEY fk_emp_dept_id
好了,明天继续。。累了