SQL语句主要可以划分为以下3个类别。
DDL(Data Definition Languages)语句:数据定义语⾔,这些语句定义了不同的数据段、数据库、表、列、索 引等数据库对象。常⽤的语句关键字主要包括create、drop、alter等。
DML(Data Manipulation Language)语句:数据操纵语句,⽤于添加、删除、更新和查询数据库记录,并检查 数据完整性。常⽤的语句关键字主要包括 insert、delete、update和select等。
DCL(Data Control Language)语句:数据控制语句,⽤于控制不同数据段直接的许可和访问级别的语句。这 些语句定义了数据库、表、字段、⽤户的访问权限和安全级别。主要的语句关键字包括grant、revoke等。
1.如果需要知道系统中都存在哪些数据库,可以⽤以下命令来查看
show databases
2.知道系统中的有哪些数据库后,可以用 use dbName 切换到要操作的数据库。例如:use test1
3. 查看当前数据库中有哪些表 show tables
4.删除数据库 drop database dbName
5.创建表语句。例如,创建⼀个名称为 emp 的表。表中包括 ename(姓名)、hiredate(雇⽤⽇
期)和 sal (薪⽔)3个字段,字段类型分别为varchar(10)、date、int(2)
create table emp(ename varchar(10),hiredate date,sal decimal(10,2),deptno int(2));
表创建完毕后,如果需要查看⼀下表的定义,可以使⽤如下命令:
DESC tablename 例如,查看emp表
6.查看创建表的语句。可以看到用的字符集和存储引擎
show create table emp \G;
7.删除表语句 drop table emp;
8.修改表
(1)修改表类型,语法如下:例如,修改表emp的ename字段定义,将varchar(10)改为varchar(20):
alter table emp modify ename varchar(20);
(2)增加表字段,语法如下:例如,在表emp中新增加字段age,类型为int(3):
alter table emp add column age int(3);
(3)删除表字段,语法如下:将字段age删除掉: alter table emp drop column age;
(4)字段改名,语法如下:将age改名为age1,同时修改字段类型为int(4):
alter table emp change age age1 int(4) ;
注意:change和modify都可以修改表的定义,不同的是change后⾯需要写两次列名,不⽅便。但是change的优 点是可以修改列名称,modify则不能。
5)修改字段排列顺序。例如,将新增的字段 birth date加在 ename之
alter table emp add birth date after ename;
修改字段age,将它放在最前⾯:alter table emp modify age int(3) first;
6)更改表名,语法如下:例如,将表emp改名为emp1,命令如下:
mysql> alter table emp rename emp1;
DML语句
DML 操作是指对数据库中表记录的操作,主要包括表记录的插⼊( insert )、更
新(update)、删除(delete)和查询(select),是开发⼈员⽇常使⽤最频繁的操作.这里略过。。。
这里只做聚合函数讲解。
SELECT [field1,field2,…,fieldn] fun_name FROM tablename
[WHERE where_contition] [GROUP BY field1,field2,…,fieldn
[WITH ROLLUP]]
[HAVING where_contition]
fun_name 表⽰要做的聚合操作,也就是聚合函数,常⽤的有 sum(求和)、count(*) (记录数)、max(最⼤ 值)、min(最⼩值)。
GROUP BY关键字表⽰要进⾏分类聚合的字段,⽐如要按照部门分类统计员⼯数量,部门就应该写在 group by
后⾯。
WITH ROLLUP是可选语法,表明是否对分类聚合后的结果进⾏再汇总。 HAVING关键字表⽰对分类后的结果再进⾏条件的过滤。 注意:having和where的区别在于,having是对聚合后的结果进⾏条件的过滤,⽽where是在聚合前就对记录进
⾏过滤,如果逻辑允许,我们尽可能⽤where先过滤记录,这样因为结果集减⼩,将对聚合的效率⼤⼤提⾼,最后 再根据逻辑看是否⽤having进⾏再过滤。
表连接。 当需要同时显⽰多个表中的字段时,就可以⽤表连接来实现这样的功能。从⼤类
上分,表连接分为内连接和外连接,它们之间的最主要区别是,内连接仅选出两张表 中互相匹配的记录,⽽外连接会选出其他不匹配的记录。我们最常⽤的是内连接。
例如,查询出所有雇员的名字和所在部门名称,因为雇员名称和部门分别存放在 表 emp和dept中,因此,需要使⽤表连接来进⾏查询:
外连接又分为左连接和右连接,具体定义如下。
左连接:包含所有的左边表中的记录甚⾄是右边表中没有和它匹配的记录。 右连接:包含所有的右边表中的记录甚⾄是左边表中没有和它匹配的记录。
⽐较这个查询和上例中的查询,都是查询⽤户名和部门名,两者的区别在于本例 中列出了所有的⽤户名,即使有的⽤户名(dony)并不存在合法的部门名称(部门号 为4,在dept中没有这个部门);⽽上例中仅仅列出了存在合法部门的⽤户名和部门名 称
6)⼦查询。
某些情况下,当进⾏查询的时候,需要的条件是另外⼀个select语句的结果,这个
时候,就要⽤到⼦查询。⽤于⼦查询的关键字主要包括 in、not in、=、!=、exists、not exists等。
7)记录联合。
我们经常会碰到这样的应⽤,将两个表的数据按照⼀定的查询条件查询出来后, 将结果合并到⼀起显⽰出来,这个时候,就需要⽤ union和 union all关键字来实现这样 的功能