DDL语句数据定义语言,这些语句定义了不同的数据段、
数据库、表、列、索引等数据库对象的定义
基础语句: -- 代表数据库或者表的名称
show databases;
create databases; create tables; use database -- ;
查询表:desc --
详细查询 show create table -- \G;
删除表或数据库:drop table --
drop database --
修改表:ALTER TABLE tablename MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]
例:alter table [tablename] modify [colunmname] varchar(20)
增加表字段:ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST | AFTER col_name]
alter table [emp] add column [age] [int(3)];
删除表字段:ALTER TABLE tablename DROP [COLUMN] col_name
字段改名:ALTER TABLE tablename CHANGE old_col_name column_definition [FIRST|AFTER col_name]
注意:change 和 modify 都可以修改表的定义,不同的是 change 后面需要写两次列名,不方便。
但是 change 的优点是可以修改列名称,modify 则不能 可选项 first|after
column_name,这个选项可以用来修改字段在表中的位置
注意:CHANGE/FIRST|AFTER COLUMN 这些关键字都属于 MySQL 在标准 SQL 上的扩展,在
其他数据库上不一定适用。
表改名,语法如下:
ALTER TABLE tablename RENAME [TO] new_tablename
DML语句
1 插入记录的基本语法如下:
INSERT INTO tablename (field1,field2,......fieldn) VALUES(value1,value2,......valuesn);
向表 emp 中插入以下记录: ename 为 zzx1, hiredate 为 2000-01-01, sal 为 2000, deptno
为 1,命令执行如下:
mysql> insert into emp (ename,hiredate,sal,deptno) values('zzx1','2000-01-01','2000',1);
在 MySQL 中,insert 语句还有一个很好的特性,可以一次性插入多条记录,语法如下:
INSERT INTO tablename (field1, field2,......fieldn)
VALUES
(record1_value1, record1_value2,......record1_valuesn),
(record2_value1, record2_value2,......record2_valuesn),
......
(recordn_value1, recordn_value2,......recordn_valuesn)
;
可以看出,每条记录之间都用逗号进行了分隔。
2更新记录
对于表里的记录值,可以通过 update 命令进行更改,语法如下:
UPDATE tablename SET field1=value1,field2.=value2,......fieldn=valuen [WHERE CONDITION]
例如,将表 emp 中 ename 为“lisa”的薪水(sal)从 3000 更改为 4000:
mysql> update emp set sal=4000 where ename='lisa';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
在 MySQL 中,update 命令可以同时更新多个表中数据,语法如下:
UPDATE t1,t2...tn set t1.field1=expr1,tn.fieldn=exprn [WHERE CONDITION]
mysql>update emp a,dept b set a.sal=a.sal*b.deptno,b.deptname=a.ename where a.deptno=b.deptno;
3 删除记录
如果记录不再需要,可以用 delete 命令进行删除,语法如下:
DELETE FROM tablename [WHERE CONDITION]
4查寻记录
SELECT * FROM tablename [WHERE CONDITION]
(1)查询不重复的记录。
有时需要将表中的记录去掉重复后显示出来,可以用 distinct 关键字来实现:
mysql> select ename,hiredate,sal,deptno from emp;
+--------+------------+---------+--------+
| ename | hiredate
| sal
| deptno |
+--------+------------+---------+--------+
| zzx | 2000-01-01 | 2000.00 | 1 |
| lisa | 2003-02-01 | 4000.00 | 2 |
| bjguan | 2004-04-02 | 5000.00 | 1 |
+--------+------------+---------+--------+
mysql> select distinct deptno from emp;
+--------+
| deptno |
+--------+
| 1 |
| 2 |
+--------+
(2)条件查询 在很多情况下,用户并不需要查询所有的记录,而只是需要根据限定条件来查询一部分数据,
用 where 关键字可以来实现这样的操作。
(3)排序和限制
用ordered by 关键字 SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1 [DESC|ASC] , field2
[DESC|ASC],......fieldn [DESC|ASC]]
DESC代表降序 ASC代表升序 默认为升序
使用LIMIT关键字来显示一部分,而不是全部。
语法:SELECT ......[LIMIT offset_start,row_count]
其中 offset_start 表示记录的起始偏移量,row_count 表示显示的行数。在默认情况下,起始偏移量为 0, 只需要写记录行数就可以,这时候,显示的实际就是前 n条记录。
例如,显示 emp 表中按照 sal 排序后的前 3 条记录:
mysql> select * from emp order by sal limit 3;
+--------+------------+---------+--------+
| ename | hiredate
| sal
| deptno |
+--------+------------+---------+--------+
| zzx | 2000-01-01 | 2000.00 | 1 |
| lisa | 2003-02-01 | 4000.00 | 2 |
| bzshen | 2005-04-01 | 4000.00 | 3 |
+--------+------------+---------+--------+
如果要显示 emp 表中按照 sal 排序后从第二条记录开始,显示 3 条记录:
mysql> select * from emp order by sal limit 1,3;
+--------+------------+---------+--------+
| ename | hiredate
| sal
| deptno |
+--------+------------+---------+--------+
| lisa
| 2003-02-01 | 4000.00 | 2 |
| bzshen | 2005-04-01 | 4000.00 | 3 |
| bjguan | 2004-04-02 | 5000.00 | 1 |
+--------+------------+---------+--------+
注意:limit 属于 MySQL 扩展 SQL92 后的语法,在其他数据库上并不能通用。
4聚合
聚合操作的语法如下:
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 进行再过滤。
(5)表连接。
当需要同时显示多个表中的字段时,就可以用表连接来实现这样的功能。