SQL 基础
一、SQL简介
现在SQL是基于SQL-86标准逐步修改出来的
二、MySQL使用入门
1、SQL分类
SQL语句主要分为3类:
(1) DDL:数据定义语句,用于定义数据库对象,例如:create、drop、alter
(2) DML:数据操纵语句,用于添加、删除、更新和查询数据库记录,例如:insert
(3) DCL:数据控制语句,用于控制不同数据段的访问权限和级别,例如:grant、revoke。
2、DDL语句
即是对数据库内部的对象进行创建、删除、修改的操作语句。
主要由DBA使用,开发人员较少使用。
(1) 创建数据库
创建db语句:create database dbname;
查看已有db语句:show databases;
选择要操作的db语句:use dbname;
查看数据库中所有数据表语句:show tables;
注:安装mysql时系统自带的语句有如下几个:
1)information_schema:主要存储系统中数据库对象信息,比如用户表信息、权限信息
2)mysql:存储西游的用户权限信息
3)test:测试数据库,任何用户都可以使用
(2) 删除数据库
删除数据库语句:drop database dbname;
(3) 创建表
创建一个表: create table tablename(列名 列值类型 约束,…. );
查看表定义:desc tablename;
查看创建表的sql语句:show create table tablename;
(以上语句除了可以看到表定义语句,还可以看到存储引擎和字符集)
Mysql的表名是以目录形式存于磁盘的,所以表名约束与目录名一致。
(4) 删除表
删除表:drop table tablename;
(5) 修改表
修改表类型:alter table tablename modify [column] 列定义 [first|after 列名]
增加表字段:alter table tablename add [column] 列定义 [first|after 列名]
(默认增加的字段在最后面)
删除表字段:alter table tablename drop [column] 列名
字段改名:alter table tablename change [column] 旧列名 列定义 [first|after 列名]
修改字段排列顺序:[first|after列名]用于设置新增列的位置,first将列置于最前,after 列名是将该列置于某列之后。
更改表名: alter table tablenamerename [to] 新表名
3、DML语句
DML是指对数据库中表记录的操作,主要包括表记录的插入、更新、删除和查询。
是开发人员使用最频繁的语句。
(1) 插入记录
插入语法:insert into tablename(filed1,… filedn) values(value1, …,valuen);
默认的字段值顺序是按表顺序,所以如果不写字段名称,就要将值按字段顺序来插入。
可以一次性插入多条记录,每条记录间用逗号分隔,这是mysql的特性,可以使得Mysql在插入大量记录时,节省很多的网络开销,大大提高插入效果(可用于优化sanguo)。
(2) 更新记录
更新语法:update tablename set filedn = valuen [where condition];
在Mysql中,update命令可以同时更新多个表中数据,语法是:
update tablename set t1.filed1 = value1, tn.fileldn=valuen[where condition];
注:多表更新的语法更多是用在根据一个表的字段,来动态的更新另一个表的字段。
(3) 删除记录
删除语法:delete from tablename [where condition];
在Mysql中,delete命令可以同时删除多个表中数据,语法是:
Delete 表别名1,表别名2 from 表名1 表别名1,表名2表别名2 [where condition];
注:如果不加条件将会清空整个表,所以要非常小心。
(4) 查询记录
1)查询语法(最基本的):select * from tablename [where condition]
查询不重复记录的语法:select distinct列名 from 表名;
2)条件查询:select * from tablename where condition
3)排序和限制
order by按照某个字段排序:
select * from tablename [where condition] [order by fieldn [desc|asc]]
desc和asc是排序顺序关键字,desc表示按照字段进行降序排列,asc升序排列(默认)。
limit使得只显示一部分而不是全部:
select …[limitoffset_start, row_count]
默认的起始偏移量是0
4)聚合
汇总操作主要是针对按某个字段进行统计使用的。语法如下:
Select [字段列表] ,聚合函数名 from 表名
[where条件]
[group by字段列表]
[with rollup]
[having where条件]
常用的聚合函数有:sum、count、max、min
Group by表示要进行分类聚合的字段
With rollup是表明是否对分类聚合后的结果进行再汇总(即是合计)
Having表示对分类后的结果再进行条件的过滤
5)表连接
需要同时显示多个表中的字段时,就用表连接
内连接是仅选出两表中互相匹配的记录(最常用),外连接是选出其他不匹配的记录(包括左连接和右连接)。
Ex:select ename, deptname from emp, dept where emp.deptno=dept.deptno;
6)子查询
进行查询时,需要的条件是另外一个select语句的结果,这个时间就要用到子查询,用于子查询的关键字有:in、not in、=、!=、exists、not exists等。
MySQL4.1以前的版本不支持子查询。
7)记录联合
将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起显式出来,这时候需要用union和union all。
Union all是把结果集直接合并到一起,而union是对union all结果去除重复记录。
Ex: select deptno from emp
union all |union
select deptnofrom dept;
4、DCL语句
主要用于DBA管理系统中的对象权限时使用,开发人员用的也少。
主要是授权grant和收权revoke的使用。
Ex: grant select, insert on 数据库名.* to ‘用户名’@’localhost’identified by ‘123’
revoke insert on 数据库名.* from ‘用户名’@’localhost’;
三、帮助的使用
使用MySQL安装后的自带的帮助文档
1、按照层次看帮助
可以用“? contents”命令来显示所有可供查询的分类。
然后可以使用“? 类别名称”来针对用户感兴趣的内容做进一步的查看。
2、快速查阅帮助
可以使用”? 关键字”来快速查询某项语法
3、常用的网络资源
官方下载: //dev.mysql.com/downloads/
官方文档: //dev.mysql.com/docs