DDL:操作数据库、表、列等
一:对数据库的操作
创建
Createdatabase mydb1;
Create database mydb2 character setgbk;
Create database mydb3 character setgbk COLLATE gbk_chinese_ci;
查询
查看当前数据库服务器中的所有数据库
Show databases;
查看前面创建的mydb2数据库的定义信息
Show create database mydb2;
删除前面创建的mydb3数据库
Drop database mydb3;
修改
查看服务器中的数据库,并把mydb2的字符集修改为utf8;
alter database mydb2 character set utf8;
删除
Drop database mydb3;
其他:
查看当前使用的数据库
Select database();
切换数据库
Use mydb2;
二:操作数据表
当前数据库中的所有表 SHOWTABLES;
查看表的字段信息 DESCemployee;
在上面员工表的基本上增加一个image列。 ALTERTABLE employee ADD image blob;
修改job列,使其长度为60。 ALTERTABLE employee MODIFY job varchar(60);
删除image列,一次只能删一列。 ALTERTABLE employee DROP image;
表名改为user。 RENAMETABLE employee TO user;
查看表格的创建细节 SHOWCREATE TABLE user;
修改表的字符集为gbk ALTERTABLE user CHARACTER SET gbk;
列名name修改为username ALTERTABLE user CHANGE name username varchar(100);
备份表结构和表数据 create tabletname2 as select * from tname1;
备份表结构 create tabletname2 like tname1;
删除表 DROP TABLE user ;
DML操作:据操作语言,用来定义数据库记录(数据)
一:插入:
练习:
create table emp(
id int,
name varchar(100),
gender varchar(10),
birthday date,
salary float(10,2),
entry_date date,
resume text
);
INSERTINTO emp(id,name,gender,birthday,salary,entry_date,resume)
VALUES(1,‘zhangsan’,‘female’,‘1990-5-10’,10000,‘2015-5-5-’,‘goodgirl’);
INSERT INTOemp(id,name,gender,birthday,salary,entry_date,resume)
VALUES(2,‘lisi’,‘male’,‘1995-5-10’,10000,‘2015-5-5’,‘goodboy’);
INSERT INTOemp(id,name,gender,birthday,salary,entry_date,resume)
VALUES(3,‘你’,‘male’,‘1995-5-10’,10000,‘2015-5-5’,‘good boy’);
查看数据库编码的具体信息
Showvariables like ‘character%’;
二:修改:
语法:UPDATE 表名 SET 列名1=列值1,列名2=列值2 。。。 WHERE 列名=值
三:删除
语法: DELETE FROM 表名【WHERE 列名=值】
delete删除表中的数据,表结构还在,删除后的数据还可以找回
truncate 删除是把表直接DROP掉,然后再创建一个同样的新表。Truncate
删除的数据不能找回。执行速度比 delete 快。
DQL数据查询语言(重要)
查询返回的结果集是一张虚拟表
重要的sql语句:
一:分组查询
当需要分组查询时需要使用GROUPBY子句,例如查询每个部门的工资和,这说明要使用部门来分组。
//注:凡和聚合函数(组函数)同时出现的列名,则一定要写在groupby 之后
聚合函数(组函数也叫统计函数):
聚合函数是用来做纵向运算的函数:
COUNT():统计指定列不为NULL的记录行数;
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
分组查询 : 查询每个部门的部门编号和每个部门的工资和:
SELECT deptno, SUM(sal)
FROM emp
GROUP BY deptno;
HAVING子句 : 查询工资总和大于9000的部门编号以及工资和:
SELECT deptno, SUM(sal)
FROM emp
GROUP BY deptno
HAVING SUM(sal) > 9000;
having与where的区别
1.having是在分组后对数据进行过滤
where是在分组前对数据进行过滤
having后面可以使用分组函数(统计函数)
where后面不可以使用分组函数。
WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而HAVING是对分组后数据的约束。
LIMIT
LIMIT用来限定查询结果的起始行,以及总行数。
select * from emp limit 3,10;
3代表起始行为3; 10代表行数 (从第三行开始往下10行)
重要点:
1.使用统计查询时(存在GROUP BY子句),SELECT子句之中只允许出现统计函数与分组字段,其它的任何字段都不允许出现。
2.统计函数单独使用时(没有GROUP BY子句)只能够出现统计函数,不能够出现其它字段
3.此错误的意思就是where子句中不能使用组函数,因为where子句是在group by子句之前先执行的,所以在sql中要想给分组后的内容进行筛选则要依赖与having子句。