数据库基础01-SQL基础语法
数据库查询语言(Structured Query Language)
数据库查询语言:
DDL(data definition language) -数据定义语言,建库建表
DML (data manipulate language ) -数据操作语言,增删改
DQL (data query language) -数据查询语言
1.DDL(data definition language)
1.库操作
1.查看数据库 show databases 2.查看数据库创造过程 SHOW CREATE DATABASE 3.创建数据库 CREATE DATABASE 数据库名 4.查看数据库 SHOW SCHEMAS; 5.修改数据库(只能修改数据的默认字符编码) ALTER DATABASE DB CHASET GBK; 6.删除库 drop database db1;
2.表操作
1.查看表 show tables 2.查看所有列 SHOW COLUMNS FROM tablename 3.查找表创建过程 SHOW CREATE TABLE 4.查看用户权限 SHOW GRANTS; 5.创建表 create table tb1( id int, name varchar(20) ) 6.删除表 drop table tb 7.删除重建 truncate table tb
单表修改操作
1.修改表名 rename table tb1 to tb2 2.增加字段 Alter table tb2 add col varchar first; -first 表示加到最前面 -after 表示加到某个字段之后 3.修改字段名 alert table tb1 change col1 col2 varcha4(100) 4.修改字段类型 alert table tb1 modify col decimal(3,2) 5.修改字段位置 alert table tb modify col varchar(100) first; 6.删除字段 alter table tb2 drop column col1;
1.3创建表取值约束(对字段取值范围进行约束)
关键字 | 知识点 | 备注 |
---|---|---|
not NULL值 | NULL值表示没有值。但是‘‘双单引号表示一个有效的值。 不同点,NULL还是占数据库存储空间的,但是‘‘双单引号不占存储空间 | |
primary key | 1.主键可以是单列也可以是多列; 2.主键只允许非NULL值的列 3.主键默认有索引;4.主键是唯一的,不重复的 | |
AutoIncrement | 自动增加 自增主键,通过的LAST_INSERT_ID( )函数可以查看 自增主键不能回退; 可以手动的插入一个手动的值,如果这个值是表中的最大值,下一个自增值会从这个自增值开始增长; 填入null时自动增加 | |
default value | 设置默认值 | |
unique | 表示字段不能重复,允许重复的null值 | |
foeign key | 外键约束,限制某个字段的取值,只能取另一个键的值 增加外键,会相应增加外键索引。但是删除外键不能删除外键索引,要单独删除索引 |
详细语法
非空约束(NOT NULL)
1.添加非空约束 create table tb2( col varchar(10) not null ) alter table tb modify col varchar(10) not null 2.取消非空约束 alter table tb modify col varchar(10); alter table tb modify col varchar(10) null;
主键约束(primary key)
1.添加主键 creat table tb( id int primary key ; ) creat table tb( id int ; name varchar(20); primary key (id,name); ) 2.删除及修改主键 alter table tb add primary key(id); alter table tb drop primary key(id);
自增(一般用域主键自增)
creat table tb( id int primary key auto_increment ; )
外键约束
1.创建外键 create table tb1( id int, foreign key (x) reference tb(id) ) 2.修改删除外键 alter table tb drop foreign key(id) reference tb1(id)
2.DML (data manipulate language )数据操作语言
2.1 insert
1.插入单行数据和插入多行数据 insert int tb (col1,col2,col3) values(val1,val2,val2); insert int tb (col1,col2,col3) values(val1,val2,val2); insert int tb (col1,col2,col3) values(val1,val2,val2); 批量插入: insert int tb (col1,col2,col3) values(val1,val2,val2),(val1,val2,val2),(val1,val2,val2); 2. 插入其他表的数据 insert into tb(col1,col2) select col1,col2 from tb2 insert into tb1 select * from tb
2.2 update
update table set col=1
2.3 delete
delete from table
全部删除建议使用truncate table ,因为delete 的原理时逐条删除数据;truncate table是删除表再新建表
3.DQL (data query language) -数据查询语言
3.1 简单查询
select col from tb select * from tb
3.2 过滤及排序
关键字 | 知识点 | 备注 |
---|---|---|
ORDER BY | 1.排序两种状态,DESC 和 ASC ,默认ASC 2.可以同时按照多列排序,排序规则按照排序列的顺序,前一个字段相同时才按照后一个字段排序; | |
WHERE | 获取数据的子集 | |
DISTINCT | 去除重复数据,只能在查询字段前面出现一次 | |
as | 查询的字段,或表达式结果,可以取别名, as可以省略 | where 后面不能使用字段别名,order by后面可以使用字段别名 |
group by | 多行分组,求多行函数的时候使用 | |
having | 对多行函数计算结果进行过滤 | where 和 having的区别 1. where过滤普通条件,不能过滤多行函数 2.having 过滤多行函数结果,能过滤普通函数; 3.where 在分组前过滤; 4.having必须跟在group by 后面。分组之后再过滤 |
select 子句的执行顺序
- select
- from
- where
- grop by
- having
- order by
- limit
WHERE子句的操作符
关键字 | 知识点 | 备注 |
---|---|---|
= | 等值过滤 | |
<> | 不等值过滤 | |
>? >=?? <? <= | 比较大小 | |
In(3,78,6,21) | 从一组数中间选值 | |
Like | 字符中模糊查郇 | |
% | 统配多个字符 | |
_(下划线) | 统配单个字符 | |
\ | 转义符,_? % | |
not | not? between? andnot? itnot? like | |
and | 并且 | |
or | 或者 | |
is null is not null | Null值过滤 | |
between a and b | 范围查询 | 包含指定的开始值和结束值 |
REGEXP | 正则表达式,和like相似,但是会降低查询性能, .(小黑点)表示任意一个字符 REGEXP BINARY 表示区分大小写 ^和&可以作为其实和结束的约束 | select * from user_info where user_id regexp ‘oo‘ 正则表达式和like的区别在于,REGEXP匹配的是子串 |
3.3 查询字段处理
字符串处理函数
char_length(‘a中‘) - 字符数 length(‘‘) - 字节数 concat(‘a‘,‘b‘,‘cde‘,‘fff‘) -连接字符串 locate(‘abc‘, ‘-abc--abc-‘) - 返回第一个子串的位置,从1开始,找不到返回0 insert(‘abcdefghijkl‘,2, 11, ‘---‘) - 用子串取代从2位置开始的11个字符 lower(‘AdFfLJf‘) - 变为小写 upper(‘AdFfLJf‘) - 变为大写 left(‘AdFfLJf‘,3) - 返回最左边的三个字符 right(‘AdFfLJf‘,3) - 返回最右边的三个字符 trim(‘ a bc ‘) - 去除两端空格 substring(‘abcdefghijklmn‘, 3, 6) - 从3位置开始的6个字符 REPLACE(‘Hello MySql‘,‘My‘,‘Your‘) - 子串替换
数字处理函数
Ceil(-3.14)- 向上取整 ,不能制定位数 floor(3.94) - 舍掉小数,向下取整 format(391.536, 2) - 数字格式化为字符串,第二个参数是小数点后位数 round(673.4974, 2) - 第二个参数,正数表示,四舍五入到小数点后两位,负数的话表示向上进位置,也即百位以上进位 TRUNCATE(234,31, 1) - 舍去至小数点后1位 abs() -取绝对值
日期处理函数
NOW() 返回当前的日期和时间 CURDATE() 返回当前的日期 CURTIME() 返回当前的时间
加密函数
md5() 单向加密,无法解密 sha() 相比md5()更加安全
Null函数
IFNULL(数据1,数据2) - 数据1是null返回数据2;不是null返回数据1 coalesce(数据1,数据2,......) - 从左向右第一个不是null的数据
分页查询
limit a,b a开始行数,b表示查询行数 相对效率比较低
多行函数(多行数据交给函数处理,产生一个计算结果)
- 多行函数会忽略null值
- 不能直接与普通字段一起查询
- 一般和group by合用
count() 计数,数量,默认null值忽略,但是count(*)的时候null值不忽略 sum() 求和,可以多列上进行计算 avg() 求平均数,只能处理单列,多列要用多个avg()函数 max() 求最大值 min() 求最小值
3.4 子查询
条件子查询
关键字 | 知识点 | 备注 |
---|---|---|
= , <> ,>,< | 单个值的查询 | |
in , > all(元素),> any(元素) | 多个值查询,in表示存在,all表示比最大的大,any表示比最小的大 | |
(col1,col2)in | 多列查询 |
行内视图和select字段子查询
行内视图 select ... from (select ... from...) as tb select ... from tb where col in (select col1 from tb2 where ) select ... from tb where id = (select id from tb2 where name=‘zhangsan‘) 字段子查询 select col,(select col1 from tb1 where tb1.id = tb.id) from tb as tb
3.5 多表联查
- 自联结
- 将一张表看成两张表
- 同一张表的主键和外键进行关联
select tb1.col,tb2.col2 from tb tb1,tb tb2 where tb1.id = tb2.refe_id
- 自然联结
- 选取两个表中全匹配的数据,舍弃不匹配的数据。由于自然连接会丢弃与其他表没匹配的数据,所以查询的数据可能造成数据信息丢失
select ... from tb [inner] join tb1 on tb.id = tb1.id
- 外联结
- left [out] join 为左边的表,筛选出所有符合 连接条件的数据
- right [out] join 为右边的表,筛选出所有符合连接条件的数据
3.6 联合查询
- 在单个查询中多个表关联查询出相似的数据
- 对单个表执行相似的操作,按单个表返回数据
关键字UNION - 必须两个以上select语句
- 每个查询都必须包含相同的列;
- UNION会自动去除重复的行
- 使用UNION ALL 不去除重复的行
- UNION 不允许多个ORDER BY语句,只能在最后使用
相关推荐
云中舞步 2020-11-12
CoderToy 2020-11-16
技术之博大精深 2020-10-16
emmm00 2020-11-17
bianruifeng 2020-11-16
世樹 2020-11-11
暗夜之城 2020-11-11
张荣珍 2020-11-12
amienshxq 2020-11-14
ASoc 2020-11-14
yungpheng 2020-10-19
loveyouluobin 2020-09-29
尘封飞扬 2020-09-29
Coder技术文摘 2020-09-29
lbyd0 2020-11-17
BigYellow 2020-11-16
sushuanglei 2020-11-12
我心似明月 2020-11-09