1.创建数据库
create database 数据库名
create database kkDB;
2.删除数据库
drop database 数据库名
drop database kkDB;
3.新建表
create table 表名(字段名 字段类型 约束条件,....,字段名 字段类型 约束条件)charset=utf8;
create table student(
id int primary key auto_increment,
name varchar(20) default ‘zz’,
age int,
sex char(20)
)charset=utf8;
4.数据操作
4.1增
4.1.1新增数据(一整行)
语法:
insert into 表名 values(字段名数据,字段名数据,字段名数据);
示例:
INSERT INTO kkdb.student VALUES(1,‘小李’,18,‘男’);
4.1.2新增数据(一行中的部分)
语法:
insert into 表名(字段名,字段名,字段名)values(字段数据,字段数据,字段数据);
示例:
insert into kkdb.student(age,sex) values(18,‘女’);
4.1.3新增多条数据
语法:
insert into 表名(字段名,字段名,字段名)values(字段数据,字段数据,字段数据),(字段数据,字段数据,字段数据);
示例:
insert into kkdb.student(name,age,sex)value(‘小红’,18,‘女’),(‘小红2’,18,‘女’);
4.2删
4.2.1删某一行
语法:
删除 delete from 表名 where 条件;
示例:
delete from kkdb.student where id=2;
4.2.2删表
语法:
drop table 表名;
drop会连同表结构
一起删掉
示例:
drop table kkdb.student;
4.3改
语法:
update 表名 set 字段名=修改的内容 where 条件
示例:
update kkdb.student set name=‘紫菜’ where age=30;
4.4查
语法:select 字段名,字段名 from 表名 where 条件;
比较符:
符号 | 含义 |
---|---|
> | 大于 |
= | 等于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
!= | 不等于 |
<> | 不等于 |
between … and … | 在…区间 |
in | 在…里 |
like | 模糊查询 |
and | 和 |
or | 或 |
not | 非 |
示例:
select * from student3 where math>80; #查询成绩大于80分的学生;
select * from student3 where math>=80; #查询成绩大于等于80分的学生;
select * from student3 where english between 65 and 80; #查询英语成绩在65分和80之间;
SELECT * from student3 WHERE english>=80 or english<=99; #or 或 一个条件成立就行
SELECT * from student3 WHERE not english>=80 # not 非 不成立;
SELECT * from student3 where english in(80,90,70,77); # in 在。。里面
模糊查询:
like
模糊查询,匹配任意多个字符 查询
%
匹配任意多个字符:select * from student3 where name like '孙%'; #查询姓孙的
_
匹配一个字符:select * from student3 where name like '孙_'; #查询孙某
排序:
语法:order by 字段名 asc/desc
默认asc(升序)
select * from student3 ORDER BY age desc; #按照年龄降序排序;
聚合函数:
语法:
max(列名) #取最大值
min(列名) #取最小值
avg(列名) # 取平均值
count(列名) #统计这列有多少数据
sum(列名) #求和
示例:
select max(age) from student3; #最大年龄学生
select min(age) from student3; #最小年龄学生
select avg(math) from student3; #math平均值
select count(math) from student3; #统计math这一列不为空的总条数
select sum(math) from student3; #对math列求和
分组:
group by
不会单独使用,通常和聚合函数一起使用;
select count(*)as ‘统计’,sex ‘性别’ from student3 group by sex; #统计男女各有多少人 统计 取个别名 as 用空格
select avg(english),sex from student3 group by sex; #男女英语成绩平均值
having:
having
用于分组后过滤数据,where
是分组之前过滤数据不能加聚合函数;
#查询年龄在28岁(包含)以上的学员人数 按照性别分组,查询性别人数大于2的数据。
select count(* )as ‘总数’,sex as ‘性别’ from student3 where age>=28 group by sex having count(*)>2;
limit:
语法:limit 起始数,显示条数
起始数不写默认从0开始
示例:SELECT * from student3 LIMIT 3,3
连接查询:
隐士查询:![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/fd5ad264f1764764874d2d1c126088dd.png#pic_center)
select emp.id,emp.name,gender,salary,join_date,dept.name from emp,dept where emp.dept_id=dept.id
join连接:
inner join
内连接,可以只写join
,相当于两张表的交集
语法:select <字段名> from <表a> inner join <表b> on a.<字段名>=b.<字段名>
示例:
select emp.id,emp.name,gender,salary,join_date,dept.name from emp inner join dept on emp.dept_id=dept.id
left join
左连接,返回左表中符合where条件语句的数据,右表没有符合连接条件时将返回null
示例:
select emp.id,emp.name,gender,salary,join_date,dept.name from emp left join dept on emp.dept_id=dept.id
right join
右连接,返回右表中符合where条件语句的数据,左表没有符合连接条件时将返回null
select emp.id,emp.name,gender,salary,join_date,dept.name from emp right join dept on emp.dept_id=dept.id
full join
全连接,返回表中符合where条件语句的数据,没有符合连接条件时将返回null
子查询:
子查询指一个查询语句嵌套在另一个查询语句内部的查询
示例:
SELECT * FROM kkDB.S WHERE SNO IN (SELECT SNO FROM kkDB.SC WHERE CNO=(SELECT CNO FROM kkDB.C WHERE CNAME=‘税收基础’))
5.存储过程:
存储过程类似python中的函数
无参数
创建语法:
delimiter // #delimiter用于定义存储过程的分隔符可子定义
CREATE PROCEDURE test_1()
BEGIN
SQL语句;
end// #end后,必须使用delimiter语句中设置的分隔符为结束
使用 call 存储名()
call test_1()
有参数
带参数的存储过程需要用in
传数据进来
delimiter //
create PROCEDURE test_2(in aname varchar(20))
BEGIN
select * from student3 where name=aname;
end//
#调用
call test_2('马云')
有参数、有返回
当需要返回调用的存储过程参数使用in
传参进去,使用out
输出数据
#有返回 用out 输出数据
#查询某个人的性别
delimiter //
create PROCEDURE test_3(in aname varchar(20), out usex varchar(20))
BEGIN
select sex into usex from student3 where name=aname;
select usex;
end//
#调用
call test_3('小红',@usex);