MYSQL数据库
关系型数据库:安全,但比较浪费空间
SQL: 结构化查询语言
MYSQL数据库
第一部分:基础操作
SQL语句的 数据操作语音 增删改查操作
库: show databases;
drop database xx;
create database xx charset utf8;
库名不可改
表:create table yy(name varcahr(10) ,age int(10))charset utf8;
drop yy
alter table uu drop name; 删除字段
desc yy;
改:1.修改表名 rename table yy to uu;
2.修改字段属性 alter table uu modify name int(10) after age;
3.修改字段名字 alter table uu change age Age int(10); age->Age
数据:insert into uu (id,name)values('d','s'),('a','f');
select *from uu;
update uu set name='ss' where id='1';
delete from uu where id='2';
第二部分:SQL数据的查询语言
SELECT selection_list /*要查询的列名称*/
FROM table_list /*要查询的表名称*/
WHERE condition /*行条件*/
GROUP BY grouping_columns /*对结果分组*/
HAVING condition /*分组后的行条件*/
ORDER BY sorting_columns /*对结果分组*/
LIMIT offset_start, row_count /*结果限定*/
1.条件查询:在where子句中
=、!=、<>、<、<=、>、>=;
BETWEEN…AND;
IN(set);
IS NULL;
AND;
OR;
NOT;
2.模糊查询:like...
3.去除重复:
DISTINCT关键字 : SELECT DISTINCT sal FROM emp;
4.查看雇员的月薪与佣金之和
SELECT *,sal+comm FROM emp;
任何东西与NULL相加结果还是NULL,把NULL转换成数值0的函数IFNULL: SELECT *,sal+IFNULL(comm,0) FROM emp;
5.给列名添加别名 as (可以省略AS关键字)
SELECT *, sal+IFNULL(comm,0) AS total FROM emp;
6.排序 ORDER BY DESC(ASC)
7.聚合函数
COUNT():统计指定列不为NULL的记录行数;
SELECT COUNT(*) AS cnt FROM emp;
SELECT COUNT(*) FROM emp WHERE sal > 2500;
SELECT COUNT(comm), COUNT(mgr) FROM emp;
lMAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SELECT MAX(sal), MIN(sal) FROM emp;
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
SELECT SUM(sal) FROM emp;
AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
SELECT AVG(sal) FROM emp;
8.分组查询 group by
查询每个部门的部门编号和每个部门的工资和:
SELECT deptno, SUM(sal) FROM emp GROUP BY deptno;
查询每个部门的部门编号以及每个部门工资大于1500的人数:
SELECT deptno,COUNT(*) FROM emp WHERE sal>1500 GROUP BY deptno;
9.HAVING子句 注意和分组的区别(WHERE是对分组前记录的条件,而HAVING是对分组后数据的约束。)
查询工资总和大于9000的部门编号以及工资和
SELECT deptno, SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal) > 9000;
10.LIMIT
查询5行记录,起始行从0开始
SELECT * FROM emp LIMIT 0, 5;
查询10行记录,起始行从3开始
SELECT * FROM emp LIMIT 3, 10;
11.分页查询
如果一页记录为10条,希望查看第3页记录应该怎么查呢?
第一页记录起始行为0,一共查询10行;
第二页记录起始行为10,一共查询10行;
第三页记录起始行为20,一共查询10行;
第三部分:完整性约束
(为了表的数据的正确性)
1.主键
主键列的值不能为NULL,也不能重复,使用PRIMARY KEY关键字
修改表时指定主键:
ALTER TABLE stu ADD PRIMARY KEY(sid);
2.主键自增长
ALTER TABLE stu CHANGE sid sid INT AUTO_INCREMENT;
3.非空
在插入记录时,对添加了非空约束的列一定要给值
sname VARCHAR(10) NOT NULL,
4.唯一
为字段指定唯一约束
sname VARCHAR(10) UNIQUE
5.外键
主外键是构成表与表关联的唯一途径
第四部分:多表查询
合并结果集;
连接查询
- 内连接
- 外连接
左外连接
右外连接
全外连接(MySQL不支持)
- 自然连接
子查询
1.合并结果集
合并结果集就是把两个select语句的查询结果合并到一起 (要求:被合并的两个结果:列数、列类型必须相同。)
UNION:去除重复记录,例如:SELECT * FROM t1 UNION SELECT * FROM t2;
UNION ALL:不去除重复记录,例如:SELECT * FROM t1 UNION ALL SELECT * FROM t2。
2.连接查询
(1)使用主外键关系做为条件来去除无用信息
SELECT * FROM emp,dept WHERE emp.deptno=dept.deptno;
(2)指定要查询的列
SELECT emp.ename,emp.sal,emp.comm,dept.dname FROM emp,dept WHERE emp.deptno=dept.deptno;
2.1 内连接 (查询结果必须满足条件)
SELECT * FROM emp e INNER JOIN dept d ON e.deptno=d.deptno;
2.2 外连接(左连接、右连接)
外连接的特点:查询出的结果存在不满足条件的可能。
(1)左连接:
SELECT * FROM emp e LEFT OUTER JOIN dept d ON e.deptno=d.deptno;
(2)右连接
SELECT * FROM emp e RIGHT OUTER JOIN dept d ON e.deptno=d.deptno;
3.自然连接
4.子查询 (嵌套查询,SELECT中包含SELECT,如果一条语句中存在两个,或两个以上SELECT,那么就是子查询语句)
子查询出现的位置:
- where后,作为条件的一部分;
- from后,作为被查询的一条表;
当子查询出现在where后作为条件时,还可以使用如下关键字:
- any
- all
子查询结果集的形式:
- 单行单列(用于条件)
- 单行多列(用于条件)
- 多行单列(用于条件)
- 多行多列(用于表)
ex:
1.工资高于甘宁的员工
查询条件:工资>甘宁工资,其中甘宁工资需要一条子查询。
SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename='甘宁')
2.工资高于30部门所有人的员工信息
查询条件:工资高于30部门所有人工资,其中30部门所有人工资是子查询。高于所有需要使用all关键字。
SELECT * FROM emp WHERE sal > ALL (SELECT sal FROM emp WHERE deptno=30)
3.查询工作和工资与殷天正完全相同的员工信息
查询条件:工作和工资与殷天正完全相同,这是子查询
SELECT * FROM emp WHERE (job,sal) IN (SELECT job,sal FROM emp WHERE ename='殷天正')
4.查询员工编号为1006的员工名称、员工工资、部门名称、部门地址
查询列:员工名称、员工工资、部门名称、部门地址
查询表:emp和dept,分析得出,不需要外连接(外连接的特性:某一行(或某些行)记录上会出现一半有值,一半为NULL值)
条件:员工编号为1006
SELECT e.ename, e.sal, d.dname, d.loc
FROM emp e, (SELECT dname,loc,deptno FROM dept) d
WHERE e.deptno=d.deptno AND e.empno=1006
查看MySQL编码
SHOW VARIABLES LIKE 'char%';
生成SQL脚本 mysqldump命令是在Windows控制台下执行,无需登录mysql
mysqldump –u用户名 –p密码 数据库名>生成的脚本文件路径
执行SQL脚本
SOURCE C:\mydb1.sql
或:mysql –u用户名 –p密码 数据库<要执行脚本文件路径
MYSQL优化

浙公网安备 33010602011771号