SQL常用语法

一、库的基本使用

1.创建数据库
 create database 数据库名;
2.查看所有数据库:
show databases;
3.查看建库语句 :
show create database 数据库名;
4.查看当前的库
select database();
5.使用、切换数据库
use 数据库名;
6.删除数据库:
drop database if exists 数据库名;
7.数据的备份还原

数据库迁移:备份、还原

dos窗口

-- 备份 转存
mysqldump -u用户名 -p密码 数据库名 > 导出文件路径
-- 还原 登录mysql
source 导入文件路径;

二、表的基本使用

1.创建表的格式:
create table 表名(
	字段名 字段类型,
    字段名 字段类型,
    ...
);
2.常用类型:
 int 整型
 double 浮点型
 varchar(指定长度)字符串
 date 日期型 
 格式:yyyy-MM-dd
 注意:注意变量名在左类型在右
3.查看库中的所有的表
show tables;
4.查看表结构
desc 表名;
5.查看建表语句
show create table 表名;
6.快速创建表结构:
-- 作用:快速创建一个表结构相同的表。

reate table 新表名 like 旧表;
7.添加字段
alter table 表名 add 字段名 字段类型;
8.修改字段类型
alter table 表名 modify 字段名 新类型;
9.修改字段名
alter table 表名 change 旧字段名 新字段名 字段类型;
10.删除字段
alter table 表名 drop 字段名;
11.删除表

直接删除

drop table 表名; 

先判断表是否存在,若存在删除

drop table if exists 表名;

三、记录增、删、改

1.添加记录
insert into 表名(字段1,字段2......) values(值1,值2...);
2.修改记录
update 表名 set 字段名 = 字段值 where 条件;
3.删除记录
delete from 表名 where 条件;

四、记录查询

1.比较运算符
--  >    <   >=   <=    =    !=    <>(不等于)
 
-- 例如:
-- 	查询math分数大于80分的学生
	select * from student where math >80;
2.逻辑运算符
and  -- : 并且
or   -- :或者
not  -- : 非 ,不是的意思。通常和 in 一起使用  

-- 例如:
 	-- 查询age大于35且性别为男的学生(两个条件同时满足)
	select * from student where age > 35 and sex = '男';
3.关键字:in
-- 他的作用是挑选,只要有满足的就显示
-- 格式:
--    字段 in (值1,值2...);

-- 例如:
	-- 查询id是1或3或5的学生
	select * from student where id in(1,3,5);
4.范围查询:包头保尾
-- 关键字:between :在....之间。
-- 格式:
-- 		字段 between 较小的值 and 较大的值; 这种叫包头包围查询。
-- 例如:
	-- 查询english成绩大于等于77,且小于等于87的学生	
	select * from student where english between 77 and 87;
5.模糊查询
-- 格式
	字段 like '通配符字符串';
	
% -- 表示任意字符 零个或多个
_ -- 表示一个字符
 
-- 例如:
    -- 查询姓马的学生
    SELECT * FROM student WHERE `name` LIKE '马%';
    -- 查询姓名中包含'德'字的学生
    SELECT * FROM student WHERE `name` LIKE '%德%';
    -- 查询姓马,且姓名有两个字的学生
    SELECT * FROM student WHERE NAME LIKE '马_';
6.排序
1、作用:
      (1)对查询结果进行排序;2)关键字:order by 字段名  
                                    升序 :asc 默认是升序。
                                    降序 :desc

2、使用格式:
    select * from 表名 order by 字段名 asc; 升序。默认!
    select * from 表名 order by 字段名 desc; 降序
    

SQL语句

# 排序
-- 查询所有数据,使用年龄降序排序
select * from  student order by age desc;
-- 查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩降序排序
select * from  student order by age desc,math desc;


-- 拓展知识点 数据库字符集 utf8 没有按照 拼音排序 必须使用 GBK
-- 使用java代码  convert() 转换函数
select * from  student order by name ;
select * from  student order by convert(name using gbk) ;
7.聚合函数

对一列数据进行计算,返回一个结果;忽略NULL

-- 格式
count(字段名) -- 统计个数。注意:使用数字,和 * 查询结果包含NULL值,用字段名不包含NULL值;
sum(字段名) -- 求和
avg(字段名) -- 平均值
max(字段名) -- 最大值
min(字段名) -- 最小值

SQL语句

# 聚合函数
-- 查询学生总数(null值处理)
select count(id) from student;
select count(english) from student;
-- count(*) count(number) 包含NULL
select count(*) from student;
select count(7) from student;
-- 查询年龄大于40的总数
select * from student where age > 40;
select count(*) form student where age > 40;
-- 查询数学成绩总分
select sum(math) from student;
-- 查询数学成绩平均分
select avg(math) from student;
-- 查询数学成绩最高分
select max(math) from student;
-- 查询数学成绩最低分
select min(math) from student;
8.分组

是指对查询结果进行分组,相同的内容分为一组;通常与聚合函数一起使用

注意:

1)、 where在分组前条件过滤,不能使用聚合函数

2)、having在分组后条件过滤,可以使用聚合函数

-- 格式:
select 分组字段 from 表名 group by 分组字段 having 条件;

SQL语句

# 分组
-- 按性别分组
select count(*) from student where sex = '男';
select count(*) from student where sex = '女';
select sex from student group by sex;

-- 查询男女各多少人
select sex,count(*) fron student group by sex;

-- 查询年龄大于25岁的人,按性别分组,统计每组的人数
select sex,count(*) fron student where age >25 group by sex;

-- 查询年龄大于25岁的人,按性别分组,统计每组的人数,并只显示性别人数大于2的数据
-- Invalid use of group function
select sex,count(*) fron student where age >25 and count(*)>2 group by sex;
select sex,count(*) fron student where age >25 group by sex having count(*)>2;
9.分页
-- 关键字  limit
-- 格式
select ... from 表名 limit [ 起始索引(0),]向后查询的个数;
	

SQL语句

-- 模拟百度分页,一页显示5条

-- 第一页
SELECT * FROM student LIMIT 0,5;
-- 第二页
SELECT * FROM student LIMIT 5,5;
-- 第三页
SELECT * FROM student LIMIT 10,5;

-- 额外知识点
-- 第N页 (n-1)*size,size

五、高级查询【多表查询】

1.内连接

作用:

	拿左表的记录去匹配右表的记录,若匹配上就显示(交集,共同拥有的部分)。

显示内连接

-- 格式
关键字 inner join :内连接   on:在
select 指定要显示的内容 from 左表 inner join 右表 on 左表.主键=右表.主键;
注意: 推荐使用,方便阅读。

隐式内连接

-- 格式 
select 指定要显示的内容 from 左表,右表  where  左表.外键=右表.主键;
注意:要使用点,(不推荐使用,不方便阅读)。
2.左外连接

作用:

	展示左表的全部记录,并拿左表的记录去匹配右表的记录,若匹配上显示右表记录,没匹配上就显示NULL

格式:

格式 
关键字: left : 左  outer 可写可不写,
select 指定显示的内容 from 左表 left [outer] join 右表 on 条件;
3.右外连接

作用:

	展示右表的全部记录,并拿右表的记录去匹配左表的记录,若匹配上显示左表记录,没匹配上就显示NULL

格式:

select 指定显示的内容 from 左表 right [outer] join 右表 on 条件;
4.子查询
1、作用:
	一条select查询的结果,作为另一条select语法的一部分

2、使用场景:
	(1)子查询结果为单值
	(2)子查询结果为单列多行
	(3)子查询结果为多列多行
	
3、总结:
	(1)子查询结果为单列,肯定在where后面作为条件使用
	(2)子查询结果为多列,肯定在from后面作为虚拟表使用

子查询结果为单值

-- 1 查询工资最高的员工是谁? 
select * from emp where salary = (select max(salary) from emp);

子查询结果为单列多行

-- 1 查询工资大于5000的员工,来自于哪些部门的名字
select name from dept where id in(select dept_id from emp where salary >5000) ;

子查询结果为多列多行

-- 1 查询出2011年以后入职的员工信息,包括部门名称
-- 1.1 查询出2011年以后入职的员工信息   
-- 查询结果 就是一张虚拟表
SELECT * FROM emp WHERE join_date > '2011-01-01';
-- 1.2 通过查询作为虚拟表 关联部门
SELECT * FROM (SELECT * FROM emp WHERE join_date > '2011-01-01') AS e INNER JOIN dept d ON e.dept_id = d.id;

六、数据库约束

1.关键字
primary key -- 主键约束。 主键要求: 唯一和非空。
unique -- 唯一
not null  -- 非空 
default -- 默认值
foreign key -- 外键
2 .主键
1、创建表时添加主键
-- 创建表
create table 表名(
    字段名 字段类型 primary key,
    ... 

);
2、对已有表添加主键
-- 已有表
alter table 表名 add primary key(字段名);
3、联合主键
-- 1、作用:
-- 		一张表设置两个主键

-- 格式:只能是创建的时候用。
create table stu(
	id int ,
	name varchar(32),
	primary key (id,NAME)-- 联合主键(id,name)
);
4、主键自增
-- 自增器起始值为 1

-- 创建表  
create table 表名(
	字段名 字段类型 primary key auto_increment,
    ....
);
-- 已有表
alter table 表名

-- 拓展知识点 id 类型为varchar 要求唯一的  生成全球唯一  36位随机字符串
SELECT UUID();
5、删除主键
-- 格式
alter table 表名 drop primary key;

-- 删除主键
ALTER TABLE stu3 DROP PRIMARY KEY;
-- 需要先移出自增器
ALTER TABLE stu3 MODIFY id INT ;
3.唯一
-- 注意:
-- 	NULL为特殊的值,可以重复出现
	
-- 创建表
create table 表名(
	字段名 字段类型 unique,
    .....
);
-- 已有表
alter table 表名 add unique(字段名);	
4. 非空
- 创建表
create table 表名(
	字段名 字段类型 not null,
    ...
);
-- 已有表
alter table 表名 modify 字段名 字段类型 not null;
5.指定默认值
-- 1、作用:【数据库所有字段的默认值为NULL】
-- 		(1)如果没有添加值。就是有指定的默认值。
--  	(2)注意:指定默认性别是“男”,添加“女”,存储的是“女”,没指定就是有默认“男”,添加NUll,存储的就是“NUll”
-- 创建表指定默认值
create table 表名(
	字段名 字段类型 default 默认值
  
);
-- 对已有表添加默认值
alter table 表名 modify 字段名 字段类型 default 默认值

七、表关系

1.分类
1、划分:【三种】
	一对一、一对多、多对多。

1、一对多:
	从表存储主表外键

2、多对多:
	需要有中间表。中间表存储双方的外键。
2.添加外键约束
-- 创建表  在从表中设置。注意:带有[]号的可写可不写。
create table 表名(
	字段名 字段类型 ,
    ....
    [constraint] [约束名] foreign key(外键字段名) references 主表(主键字段)
);
-- 已有表
alter table 表名 add  [constraint] [约束名] foreign key(外键字段名) references 主表(主键字段);
3.删除外键
-- 格式
alter table 表名 drop foreign key 约束名;
4.注意事项
  1. 主表不能删除从表已引用的数据
  2. 从表不能添加主表未拥有的数据
  3. 先添加主表数据再添加从表数据
  4. 先删除从表数据再删除主表数据

八、事务的使用

1.MySQL事务介绍
1、注意:
	MySQL数据库默认一条sql语句一个事务

2、事务关键字:
	begin  :开启事务。
	rollback: 回滚事务。
	commit:  提交事物。

SQL语句

-- 开启事务
begin;
-- 雨琦扣钱 -100
update account set balance=balance-100 where id =1;
-- 巴元加钱 +100
update account set balance=balance+100 where id =2;
-- 提交事务
commit;
2.回滚点
1、作用:
	事务开启后,当我们一部分操作成功,添加一个回滚点,后续操作报错了,直接到回滚点,保证之前的操作能够成功提交。

添加一个回滚点

-- 格式
savepoint 回滚点名;

直接到回滚点

-- 格式
rollback to 回滚点名;
3.查看是否开启自动提交
-- 格式
show variables like '%commit%';
4.临时修改自动提交为关闭
-- 关闭  off - false - 0
set autocommit=0;
-- 开启  on - true - 1
set autocommit=1;

九、事物级别操作

当前数据库隔离级别

-- 格式
show variables like '%isolation%';

临时修改数据库的隔离级别

-- 格式
set session transaction isolation level 级别字符串;

十、权限操作

1、创建用户
-- 格式
create user '用户名'@'主机地址' identified by '新密码';
主机地址 localhost or 127.0.0.1 
% 代表任意主机地址【慎重】
密码可以为空 【慎重】
2、用户授权
-- 格式
grant 权限1,权限2... on 数据库名.表名 to '用户名'@'主机地址';

权限
	create drop select update ....
	all 代表所有的权限【慎重】
*.* 所有库.所有表 【慎重】
数据库名.* 【经常使用】
3、查看授权
-- 格式
show grants for '用户名'@'主机地址';
4、撤销授权
-- 格式
revoke 权限1,权限2... on 数据库名.表名 from '用户名'@'主机地址';
权限
	create alter drop select update ....
	all 代表所有的权限【慎重】
*.* 所有库.所有表 【慎重】
数据库名.* 【经常使用】
5、删除用户
-- 格式
drop user  '用户名'@'主机地址';

十一、密码管理

1、超级用户

-- 格式 在dos窗口下
mysqladmin -u用户名 -p password 新密码

2、普通用户

-- 格式
set password for '用户名'@'主机地址'=password('新密码');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值