SQL语言基础

一、SQL语言简介
结构化查询语言

二、分类
分为DDL(数据定义语言)、DML(数据操纵语言)、DCL(数据控制语言)
DDL:这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象,常用的关键字包括create、drop、alter等;
DML:用于对数据库表数据的增删改查操作,常用的关键字为insert、delete、update、select
DCL:用于控制不同数据段直接访问的许可和访问级别的语句,这些语句定义了数据库、表、字段、用户的访问权限和安全级别,主要使用的关键字为grant、revoke等

三、DDL:数据定义语言
数据库定义语言,就是对数据库对象进行操纵的语言,主要是对数据库的创建和删除,和表的增删改操作,主要是给DBA使用。

1.MySQL自带数据库:
information_schema:主要是存储了数据库对象信息,比如:用户表信息、列信息、权限信息、字符集信息、分区信息等。
cluster:存储了系统的集群信息。
mysql:存储了系统的用户权限信息
test:系统自动创建的数据库,供测试使用,任何用户都可以使用

2.对数据库的操作:
①创建数据库
create database dbname
②使用数据库
use dbname
③删除数据库
drop database dbname

3.对表结构的操作:
①创建表
create table tablename(
column_name1 column_type_1 constraints,
column_name2 column_type_2 constraints,
...
)
②查看表结构
1)查看表的定义:DESC tablename
2)查看表的创建语句信息:show create table tablename
③删除表
drop table tablename
④修改表
对于已经有大量数据的表,如果当我么么需要修改表的结构的时候,有时候会删掉该表重新进行建表,这样会使数据进行重新加载,如果有服务在访问表的时候,也会产生一定影响。此时我们可以采用只更改表结构的方法,而不是删除之后重新建表。
1)修改表类型(修改字段类型)
alter table tablename MODIFY[COLUMN] column_definition [FIRST|AFTER col_name]
例如:修改表字段类型
alter table tablename modify 字段名 新的字段类型
2)增加表字段
alter table tablename add column 字段名 字段类型
3)删除表字段
ALTER TABLE tablename drop column column_name
4)字段改名
 alter table tablename change 字段名 新字段名 新字段类型 注意:modify和change都可以修改字段的类型,但是change需要写两次字段的名字,不方便,但change可以更改字段的名字modify不可以
 5)修改字段的排列顺序
 修改表字段类型和修改表字段名称和增加字段(modify、change、add)都有一个可选语法first|after column_name,这个选项可以改变字段的位置,add默认是加在表的最后位置,而前两个都默认不会改变字段的位置。
 例如:alter table tablename modify column_name column_type first column_name_1;最后after和first如果不写字段都是放在最后面或者最前面
 6)更改表名
 alter table tablename rename new_tablename
 
 四、DML语句
 数据操纵语句,主要还是对表记录的增删改查操作,主要是用于开发人员的操作。
 1.插入操作:insert
 insert into tablename(字段名1,字段名2,,...)values(value1,value2,...),(value1,value2,...)...
 也可以直接values加值,不过要满足要按表的顺序结构插入字段值(null、默认值、自增字段可以不写)
 注意:values后面可以跟多个()表示一次插入多条记录,记录之间用,隔开
 2.更新操作:update
 更新单表数据:
 update tablename set 字段名1=字段值1,字段名2=字段值2...
 更新多表数据:
 update tablename1 t1,tablename2 t2 set t1.字段1=value1,t1.字段=value2...
 多表更新的语法多用于根据一个表的字段动态更新另外一个表的字段
 3.删除操作:delete
 delete t1,t2.字段2... from tablename1 t1,tablename t2...
 注意:删除操作一般要加where条件,否则会删除所有该表的记录
 4.查询操作:select
 数据库的查询操作是最常用的操作,也是最复杂的操作,除了查找所有记录select * from tablename之外的查询方法分为下面7个查询方式:
 ①去重复查询
 用distinct关键字来实现:
 select distinct 字段名 from 表名
 ②条件查询
 where关键字
 select * from tablename where column1=? and column2<?...等等(单个条件可以使用> = < != <= <> <=>等等,多条件查询还哦可以使用or and等逻辑运算符来表示实现多条件联合查询)
 ③排序和限制
 排序我们使用order by 来实现 限制升序和降序我们使用关键字ASC和DESC来表示,其中默认为升序排列ASC,limit关键字用来显示几条数据的,下面的表示从第二个记录开始显示三条记录
 select * from tablename order by column1,column2.... limit 1,3 DESC|ASC 注意:排序是先按照column1进行排序如果两列数据的column1值是一样的再按照column2的值啦进行排序,依稀类推,limit经常和order by结合来实现分页查询(limit关键字属于MySQL特有语法,在其他数据库中并不能通用)
 ④聚合查询
 使用关键字group by和having来实现的
 select 字段名 聚合操作:常用的聚合函数有求和sum()、求记录数count()、求最大值max()、求最小值min()
 from tablename 
 where 条件
 group by 字段名:表示要进行分类和的字段是什么
 [with rollup]:可选语法,用来表名是否对分类聚合后的结果进行再汇总
 having 聚合条件:对分类之后的结果再次进行过滤
 注意:where和having的区别:having是对聚合之后的结果进行过滤,而where再聚合之前就已经对数据进行过滤了,要是逻辑允许的话,我们尽量使用where对数据进行过滤,因为这样会使结果集减小,将对聚合的效率大大提高,左后在根据逻辑看是否使用having对数据进行过滤
 ⑤表连接 当如果需要显示多个表中的字段的数据的时候我们就会使用到表连接的查询方式,表连接查询分为内连接查询和外连接查询,内连接无关键字,外连接关键字为left join、right join,内连查询主要是为了显示两张表中根据条件所匹配的记录,如:
 select t1.字段1,t2.字段2 from tablename1 t1,tablename2 t2 where t1.字段1=t2.字段2
 外连查询主要是可能会选择出与查询条件不匹配的记录,外连查询又分为左连接查询和右连接查询
 左连接查询包含所有左边表中的记录,右边表中没有和它匹配的记录也是一样显示,右连查询包含右边表中所有的记录,左边表中不包含和它匹配的记录也是一样显示,左连接关键字left join 右连接关键字:right join,左连接和右连接可以相互转换,例子:
 select t1.字段1,t2.字段2 from tablename1 t1 left join tablename2 t2 on t1.字段1=t2.字段2
 和 select t1.字段1,t2.字段2 from tablename2 t2 right join tablename1 t1 on t1.字段1=t2.字段2结果一样
 ⑥子查询
在有些情况,我们在进行查找的时候可能会使用另外一个select语句查询的结果,这个就叫做子查询,子查询的关键字为:in、not in、=、!=、exists、not exists等。比如:查询t1表中的有关s1字段在t2表中的所有记录
 select * from t1 where s1 in(select s1 from t2)如果查询结果唯一还可以使用=来代替in
 注意:在某种特定的情况下,表连接和子查询可以相互转化:
 比如上面的就可以写成:select * from t1 where t1.s1 = t2.s1 在mysql4.1之前不支持子查询只能用表连接来替代子查询,如果表连接个子查询可以互换的时候,尽量使用表连接,因为在很多情况下表连接都要优于子查询的
 ⑦记录联合 主要是使用的范围是将两个表按照一定条件查询出来的时候将结果合并到一起进行显示,需要使用的关键字是UNION和UNION ALL,他们两个主要的区别就是在把结果集合并到一起的时候UNION是将UNION ALL合并之后的结果进行一次去重复(distinct)操作
 
 五、DCL语句
 主要是用来管理系统中的对象的权限用的,一般是DBA来使用的,常用的关键字为grant revoke
 例子:对数据库用户u1,具有数据库s1中赋予所有表的select/insert权限:
 grant select,insert on s1.* to 'u1'@'localhost' identify by '123'
 收回该用户的insert权限,使其只拥有select权限
 revoke insert on s1.* from 'u1'@'localhost'
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值