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优化

posted @ 2018-10-19 15:24  StingLon  阅读(230)  评论(0)    收藏  举报