MySQL中常用的SQL语句(总结)

文章目录

1.数据库的相关操作

1.1 连接数据库 

1.2 创建数据库 

1.3 查看数据库有哪些 

1.4 查看指定的数据库 

1.5 删除指定的数据库

1.6 使用数据库(很重要) 

1.7 断开服务器的连接 

2.表的相关操作

2.1 创建表 

2.2 查看表的结构 

2.3 查看表的详细信息 

2.4 查看某个数据库中有哪些表

2.5 删除指定的表 

2.6 字段名的数据类型

2.7 添加主键约束

2.8 添加外键约束

2.9 添加常用约束

3.数据库和表的基本操作

3.1 修改表名

3.2 修改字段名和字段的数据类型

3.3 添加和删除字段

3.4 修改字段的排列位置

3.5 删除表的外键约束

3.6 插入数据(INSERT INTO , VALUES)

3.7 查看数据是否成功插入表中

3.8 更新数据(UPDATE , SET)

3.9 删除数据(DELETE , TRUNCATE)

4.单表查询 

4.1 基本查询语句(SELECT , FROM , WHERE)

4.2 带IN和NOT IN关键字的查询 

4.3 带(NOT)BETWEEN AND 的范围查询

4.4 带LIKE的字符匹配查询

4.4.1 百分号通配符"%" 

4.4.2 下划线通配符"_"

4.5 查询空值(IS NULL)与去重(DISTINCT)

4.6 带 AND 与 OR 的多条件查询

4.7 对查询结果进行排序(ORDER BY)

4.8 分组查询(GROUP BY)

4.9 使用 LIMIT 限制查询结果的数量

5.使用聚合函数查询 

5.1 COUNT()函数 

5.2 SUM()函数

5.3 AVG()函数

5.4 MAX()函数

5.5 MIN()函数

6.连接查询(多表查询)

6.1 内连接查询 

6.2 外连接查询(左/右)

6.3 复合条件连接查询

6.4 子查询

6.4.1 带比较运算符的子查询 

6.4.2 带IN的子查询 

6.4.3 关键字子查询(ANY , ALL)

7.SQL语句的编写顺序

8.SQL语句的执行顺序


 


1.数据库的相关操作

  • 1.1 连接数据库 

mysql -u[用户名] -p[密码]
  • 1.2 创建数据库 

模板:CREATE DATABASE 数据库名;
举例:CREATE DATABASE school;
  • 1.3 查看数据库有哪些 

模板:SHOW DATABASES;
(无需加具体的数据库名)
  • 1.4 查看指定的数据库 

模板:SHOW CREATE DATABASE 数据库名;
举例:SHOW CREATE DATABASE school;
  • 1.5 删除指定的数据库

模板:DROP DATABASE 数据库名;
举例:DROP DATABASE school;
  • 1.6 使用数据库(很重要) 

模板:USE 数据库名;
举例:USE school;
(在对其中一个数据库进行一系列操作的时候,必须要先声明使用的是哪一个数据库,即上面的SQL语句!!!)
  • 1.7 断开服务器的连接 

模板1:exit;
模板2:quit;

2.表的相关操作

  • 2.1 创建表 

模板:CREATE TABLE 表名
     (
        字段名1  数据类型  [列级约束],
        字段名2  数据类型  [列级约束],
        ......
        表级约束
     );
举例:CREATE TABLE student
     (
        sno char(10),
        sname varchar(5),
        sage int(5),
        sex char(3)
     );
(在此,我们只是创建了一个基本表,并没有对表中字段添加相关约束,随后会一一介绍!!!)
  • 2.2 查看表的结构 

模板1:DESCRIBE 表名;
模板2:DESC 表名;
举例:DESC student;
  • 2.3 查看表的详细信息 

模板:SHOW CREATE TABLE 表名;
举例:SHOW CREATE TABLE student;
  • 2.4 查看某个数据库中有哪些表

模板:SHOW TABLES;
举例:SHOW TABLES;
(这个和查看有哪些数据库一样,无需添加数据库名或者表名)
  • 2.5 删除指定的表 

模板:DROP TABLE 表名;
举例:DROP TABLE student;
  • 2.6 字段名的数据类型

int              整型
char(n)          定长字符型
varchar(n)       变长字符型
float(m,d)       单精度型,m表示总位数,d表示小数位数
decimal(m,d)     双精度型
date             日期型
(这里直接说MySQL支持的主要数据类型)
  • 2.7 添加主键约束

举例:CREATE TABLE student
     (
        sno char(10) PRIMARY KEY,
        sname varchar(5),
        sage int(5),
        sex char(3)
     );
(我们在第一个字段名sno的后面添加列级约束:PRIMARY KEY,即指定字段sno为student表的主键)
  • 2.8 添加外键约束

模板:CONSTRAINT 外键约束名 FOREIGN KEY(外键名) REFERENCES 主表名(主键名)
(在添加外键约束的时候,需要有一个父表(主表)和子表)

举例:CREATE TABLE student
     (
        sno char(10) PRIMARY KEY,
        sname varchar(5),
        sage int(5),
        sex char(3)
     );
      CREATE TABLE score
     (
        sno char(10) PRIMARY KEY,
        cno char(10),
        cname varchar(10),
        ctype varchar(5),
        CONSTRAINT fk_temp FOREIGN KEY(sno) REFERENCES student(sno)
     );
(我们在此就为score表添加了外键约束,外键约束名为fk_temp,外键名为sno)
  • 2.9 添加常用约束

常用约束类型有:
(1)primary key         单一主键约束,primary key(字段名1,字段名2)  联合主键
(2)foreign key         外键约束
(3)unique              唯一约束 ,取值不能重复,但允许有一个为空
(4)null                为空约束(系统默认的)
(5)not null            非空约束
(6)default 值          默认约束,给定字段一个默认值,
	                添加字符串型默认值要使用单引号,表示为'值’。
	                如果是整型则不需要加任何符号; 
	                如果要添加的是中文默认值,则需要加上 DEFAULT CHARSET=utf8;  使用英文字符则不需要。
(7)auto_increment     自增约束,默认情况下初始值和增量都为1。
1.添加唯一约束
  CREATE TABLE student
  (
     sno char(10) PRIMARY KEY,
     sname varchar(5) UNIQUE,
     sage int(5),
     sex char(3)
  );
2.添加非空约束
  CREATE TABLE student
  (
     sno char(10) PRIMARY KEY,
     sname varchar(5) NOT NULL,
     sage int(5),
     sex char(3)
  );
3.使用默认约束
CREATE TABLE student
(
    sno char(10) PRIMARY KEY,
    sname varchar(5),
    sage int(5),
    sex char(3) DEFAULT "男"
)DEFAULT CHARSET=utf8;
4.设置表的属性值自动增加
CREATE TABLE student
(
    sno char(10) PRIMARY KEY AUTO_INCREMENT,
    sname varchar(5),
    sage int(5),
    sex char(3)
);
(默认情况下,关键词AUTO_INCREMENT的初始值的增量均为1)

3.数据库和表的基本操作

  • 3.1 修改表名

模板:ALTER TABLE 旧表名 RENAME [TO] 新表名;
举例:ALTER TABLE student RENAME people;
(此时我们把student表修改为一个新的表名people)
  • 3.2 修改字段名和字段的数据类型

模板1:修改字段名
      ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;
      (数据类型必须跟在新字段名的后面,数据类型可改可不改,如果不需要修改字段的数据类型,
       可以把新字段的数据类型设置为和原来一样,但是,千万不要空着它!)
举例:ALTER TABLE student CHANGE sage Sage int(5);
模板2:修改字段的数据类型
      ALTER TABLE 表名 MODIFY 字段名 新数据类型;
举例:ALTER TABLE student MODIFY sage varchar(5);
  • 3.3 添加和删除字段

模板1:添加字段(默认在表的最后一列添加字段)
       ALTER TABLE 表名 ADD 字段名 数据类型 [约束类型];
举例:ALTER TABLE student ADD smajor varchar(10) NOT NULL;
模板2:添加字段(指定在表的第一列添加字段)
       ALTER TABLE 表名 ADD 字段名 数据类型 [约束类型] FIRST;
举例:ALTER TABLE student ADD smajor varchar(10) FIRST;
模板3:添加字段(指定在表的某一列添加字段)
       ALTER TABLE 表名 ADD 字段名 数据类型 [约束类型] ALTER 指定已存在的字段名;
举例:ALTER TABLE student ADD smajor varchar(10) AFTER sage;
模板4:删除字段
       ALTER TABLE 表名 DROP 字段名;
举例:ALTER TABLE student DROP smajor;
  • 3.4 修改字段的排列位置

模板1:修改字段为表的第一字段
       ALTER TABLE 表名 MODIFY 字段名 数据类型 FIRST;
举例:ALTER TABLE student MODIFY sname varchar(5) FIRST;
模板2:修改字段到表的某个字段之后
       ALTER TABLE 表名 MODIFY 字段名 数据类型 AFTER 指定字段名;
举例:ALTER TABLE student MODIFY sname varchar(5) AFTER sage;
  • 3.5 删除表的外键约束

模板:ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名;
举例:ALTER TABLE score DROP FOREIGN KEY fk_temp;
(其中fk_temp为score表的外键约束名)
  • 3.6 插入数据(INSERT INTO , VALUES)

模板:INSERT INTO 表名 (字段名1,字段名2,......)
      VALUES(字段名1的值,字段名2的值,......),
            (字段名1的值,字段名2的值,......),
            ......
            (字段名1的值,字段名2的值,......);
(如果插入的全部列的值,则INSERT INTO 表名后面的内容就可以省略;如果是部分列,则不能省略)
举例:INSERT INTO student(sno,sname)
      VALUES("201805050201","张三"),
            ("201805050255","李四"),
            ("201805050230","王五");
  • 3.7 查看数据是否成功插入表中

模板:SELECT *;
      FROM 表名;
举例:SELECT *;
      FROM student;
  • 3.8 更新数据(UPDATE , SET)

模板1:更新表中的所有行的一列值
       UPDATE 表名
       SET 字段名1=它的新值;
举例:UPDATE student
      SET sage=20;
(此时,我们把student表的sage字段对应的所有值都更新为20)
模板2:更新表中的所有行的多列值
       UPDATE 表名
       SET 字段名1=它的新值,
           字段名2=它的新值,
           ......;
举例:UPDATE student
      SET sage=20,
          sex="男",
          smajor="计科";
模板3:更新表中指定行的1列或多列值
       UPDATE 表名
       SET 字段名1=它的新值,
           字段名2=它的新值,
           ......
       WHERE 条件表达式;
举例:UPDATE student
      SET sage=18,
          sex="女"
          sno="201805050202"
      WHERE id=3;
  • 3.9 删除数据(DELETE , TRUNCATE)

模板1:删除表中的指定行
       DELETE FROM 表名
       WHERE 条件表达式;
举例:DELETE FROM student
      WHERE sage>=18;
模板2:删除表中的所有行
       DELETE FROM 表名;
举例:DELETE FROM student;
模板3:DELETE 和 TRUNCATE
       TRUNCATE TABLE 表名;
举例:TRUNCATE TABLE student;
(DELETE:一条一条的删除表中的数据)
(TRUNCATE:直接删除的是表,而不是表中的内容,但是删除结束后,还会重新创建一个表)

4.单表查询 

  • 4.1 基本查询语句(SELECT , FROM , WHERE)

模板1:查询表中的某个字段
       SELECT 字段名
       FROM 表名;
举例:SELECT sno
      FROM student;
模板2:查询表中的多个字段
       SELECT 字段名1,字段名2
       FROM 表名;
举例:SELECT sno,sname
      FROM student;

在模板1和2中,我们也可以用关键字 as 给字段名起别名,方便我们查看和理解查询的结果!!!
举例:SELECT sno as 学生学号,sname as 学生姓名
      FROM student;
(在这里,关键字 as 可以省略)
模板3:查询表中的所有字段
       SELECT *
       FROM 表名;
举例:SELECT *
      FROM student;
模板4:条件查询
       SELECT 字段名1,字段名2
       FROM 表名
       WHERE 条件表达式;
举例:SELECT sno,sname
      FROM student
      WHERE sex<>"女";
  • 4.2 带IN和NOT IN关键字的查询 

模板:SELECT 字段名 
      FROM 表名 
      WHERE 字段名 IN (n1,n2,n3,...);
举例:SELECT sno,sname
      FROM student
      WHERE grade IN (98,99,100);
(查询成绩为98,99,100的学生的学号和姓名)
(NOT IN的使用方法和IN是一样的,在这就不再举例了)
  • 4.3 带(NOT)BETWEEN AND 的范围查询

模板:SELECT 字段名 
      FROM 表名 
      WHERE 字段名 BETWEEN n1 AND n2;
举例:SELECT sno,sname
      FROM student
      WHERE grade BETWEEN 90 AND 100;
(查询成绩在90到100之间的所有学生的学号和姓名)
(NOT BETWEEN AND 和 BETWEEN AND的使用方法是一样的)
  • 4.4 带LIKE的字符匹配查询

  • 4.4.1 百分号通配符"%" 

模板1:SELECT 字段名 
       FROM 表名 
       WHERE 字段名 LIKE '字符%';
(百分号通配符%可以匹配任意长度的字符,甚至包括零字符。其中 % 的位置可以根据需要在字符之间改变)

举例1:SELECT sno,sname
      FROM student
      WHERE sno LIKE "20180505%";
(查询学号以20180505开头的学生学号和姓名)

举例2:SELECT sno,sname
       FROM student
       WHERE sno LIKE "%0505%";
(查询学号中间包含0505的学生学号和姓名)

举例3:SELECT sno,sname
       FROM student
       WHERE sno LIKE "%0201";
(查询学号结尾为0201的学生学号和姓名)
  • 4.4.2 下划线通配符"_"

模板:SELECT 字段名 
      FROM 表名 
      WHERE 字段名 LIKE '字符_';
(下划线通配符"_"只能模糊匹配1个字符)
(如果你想用下划线通配符"_"匹配多个字符,那只能多用几个"_"咯!其中"_"的位置可以根据需要在字符间变化。 
举例1:SELECT sno,sname
      FROM student
      WHERE grade LIKE "_9";
(查询学生成绩以9结尾的学生学号和姓名)

举例2:SELECT sno,sname
      FROM student
      WHERE grade LIKE "________02";
(查询学号以02结尾的学生学号和姓名,假设学号是2018050502的格式,那么在02之前就需要用8个下划线通配符"_")

举例3:SELECT sno,sname
       FROM student
       WHERE grade LIKE "_子%";
(查询学生姓名中第二个字为"子"的学生学号和姓名)
  • 4.5 查询空值(IS NULL)与去重(DISTINCT)

模板:SELECT 字段名 
      FROM 表名 
      WHERE 字段名 IS NULL;
(查询数据表中的空值对应的数据)

举例:SELECT sno,sname
      FROM student
      WHERE grade IS NULL;
(查询student表中学生成绩为空的数据)
模板:SELECT DISTINCT 字段名 
      FROM 表名;
举例:SELECT DISTINCT grade
      FROM student;
(对student表中的成绩字段进行去重处理)
  • 4.6 带 AND 与 OR 的多条件查询

模板:SELECT 字段名 
      FROM 表名 
      WHERE 表达式1 AND 表达式2;
(小提示: 可以同时添加多个过滤条件,增加条件的同时只需增加一个 AND 关键字。)

举例:SELECT sno,sname
      FROM student
      WHERE sage=18 AND sex="男";
(查询年龄为18,且性别为男的学生学号和姓名)
模板:SELECT 字段名 
      FROM 表名 
      WHERE 表达式1 OR 表达式2;
(与AND相反,在WHERE声明中使用OR关键字表示只需满足两个条件中的其中一个条件即可返回结果)

举例:SELECT sno,sname
      FROM student
      WHERE sage=18 OR sex="男";
(查询年龄为18或者性别为男的学生学号和姓名,只要满足其中一个就行)
  • 4.7 对查询结果进行排序(ORDER BY)

模板:SELECT 字段名 
      FROM 表名 
      WHERE 条件表达式 (WHERE子句也可以不加)
      ORDER BY 字段名 [ASC[DESC]];
(默认升序:ASC,也可以定义降序:DESC)

举例:SELECT sno,sname
      FROM student
      WHERE sex="男"
      ORDER BY sage DESC;
(我们对性别为男的学生进行,按年龄降序排序,最后将其学号和姓名输出)
  • 4.8 分组查询(GROUP BY)

模板:SELECT 字段名 
      FROM 表名 
      GROUP BY 字段名;
(分组查询的关键字是Group By,查询的是每个分组中 首次出现的一条记录)
(一般情况下,GROUP BY都和聚合函数一起使用)

举例:SELECT *
      FROM student
      GROUP BY sage;
(在GROUP BY子句之后还可以使用 HAVING 来对分组结果进行筛选)
  • 4.9 使用 LIMIT 限制查询结果的数量

模板:SELECT 字段名 
      FROM 表名 
      LIMIT [OFFSET,] 记录数;
(第一个参数:OFFSET,可选参数,表示偏移量,如果不指定默认值为0,表示从查询结果的第一条记录开始,
 若偏移量为1,则从查询结果中的第二条记录开始,以此类推)
(第二个参数,记录数,表示返回查询结果的条数)

举例:SELECT *
      FROM student
      ORDER BY sage ASC
      LIMIT 1,4;
(表示从student表中第2条记录开始,向后检索4条数据,并按年龄升序排序)

5.使用聚合函数查询 

  • 5.1 COUNT()函数 

模板:SELECT COUNT(*/字段名) 
      FROM 表名;
      可加,可不加:WHERE 条件表达式;
(COUNT()函数是用来统计记录的总条数)

举例:SELECT COUNT(sno)
      FROM student;
(统计student表中一共有多少条记录)
  • 5.2 SUM()函数

模板:SELECT SUM(字段名) 
      FROM 表名;
      可加,可不加:WHERE 条件表达式;
(SUM()函数是对数据表的某列进行求和操作)

举例:SELECT SUM(grade)
      FROM score
      WHERE course="语文";
(计算score表中语文成绩的总和)
  • 5.3 AVG()函数

模板:SELECT AVG(字段名)
      FROM 表名;
      可加,可不加:WHERE 条件表达式;
(AVG()函数是对数据表的某列进行求平均值操作)

举例:SELECT AVG(grade)
      FROM score
      WHERE course="数学";
(计算score表中,数学科目的平均成绩)
  • 5.4 MAX()函数

模板:SELECT MAX(字段名)
      FROM 表名;
      可加,可不加:WHERE 条件表达式;
(MAX()函数是求某列的最大数值)

举例:SELECT MAX(grade)
      FROM score
      WHERE course="数学";
(查询score表中,数学科目成绩的最高分)
  • 5.5 MIN()函数

模板:SELECT MIN(字段名)
      FROM 表名;
      可加,可不加:WHERE 条件表达式;
(MIN()函数是求某列的最小数值)

举例:SELECT MIN(grade)
      FROM score
      WHERE course="数学";
(查询score表中,数学科目成绩的最低分)

6.连接查询(多表查询)

  • 6.1 内连接查询 

仅将两个表中满足连接条件的行组合起来作为结果集,称为内连接;
关键字: [inner] join ...  on。

模板:SELECT 字段名1,字段名2,......
      FROM 表1
      JOIN 表2
      ON 表1.字段=表2.字段;
解释:从表1中取出每一条记录,去表2中与所有的记录进行匹配,匹配必须是某个条件在表1中与表2中相同,
      相同一般理解为两个表的公共字段,最终才会保留结果,否则不保留。inner 关键字可省略不写;on 表示连接条件。

举例:SELECT student.sno,sname,smajor,cno
      FROM student
      JOIN score
      ON student.sno=score.sno;
(我们对student表和score表做内连接运算,选取两个表的公共字段sno进行连接)
(在输出的时候,如果输出的是公共字段sno,则需要在前面加上表名前缀:student.sno)


以上是其中一种写法,下面我们介绍另一种写法:
模板:SELECT 字段名1,字段名2,......
      FROM 表1,表2
      WHERE 表1.字段=表2.字段;
举例:SELECT student.sno,sname,smajor,cno
      FROM student,score
      WHERE student.sno=score.sno;
  • 6.2 外连接查询(左/右)

外连接查询分为左外连接查询和右外连接查询;
关键字: left/right [outer] join ... on

模板1:SELECT 字段名1,字段名2,......
      FROM 表1
      LEFT JOIN 表2 
      ON 表1.字段=表2.字段;  (不局限于两个表,可以有更多的表)

模板2:SELECT 字段名1,字段名2,......
      FROM 表1
      RIGHT JOIN 表2 
      ON 表1.字段=表2.字段;  (不局限于两个表,可以有更多的表)

语法解释:左外连接:在内连接的基础上,还包含表1中所有不符合条件的数据行,并在其中的表2列填写 NULL。
         右外连接:在内连接的基础上,还包含表2中所有不符合条件的数据行,并在其中的表1列填写 NULL。
(与内连接相似,只是查询结果少了一些数据,多出来了一些为NULL的数据,所以不再举例了)
  • 6.3 复合条件连接查询

复合条件连接查询,就是在连接查询的过程中,通过添加过滤条件来限制查询结果,使查询结果更加精确。
模板与内连接类似,只是在内连接的基础上,增加了一些查询条件!!!

举例1:SELECT student.sno,sname,smajor,cno
       FROM student,score
       WHERE student.sno=score.sno AND sage>=18;
(对两个表做内连接运算之后,再进行对年龄大于等于18的筛选和检索)

举例2:SELECT student.sno,sname,smajor,cno
       FROM student,score
       WHERE student.sno=score.sno
       ORDER BY sage DESC;
(对两个表做内连接运算之后,再对结果按年龄降序排序输出)

以上,只是举了两个例子来更好的理解,复合条件当中还有很多,比如使用聚合函数,GROUP BY子句等等!!!
  • 6.4 子查询

  •  6.4.1 带比较运算符的子查询 

模板:SELECT * 
      FROM 表1 
      WHERE 字段名1=
      (
        SELECT 字段名2 
        FROM 表2
        可加,可不加:WHERE 条件表达式
      );

比较运算符:大于:>,大于等于:>=,小于:<,小于等于:<=,等于:=,不等于:!=或者<>

举例:SELECT name,age
      FROM tb_emp
      WHERE age>
      (
	SELECT AVG(age)
	FROM tb_emp
      );
(查询大于所有平均年龄的员工姓名与年龄)
  • 6.4.2 带IN的子查询 

模板:与上面的带比较运算符类似,只是把比较运算符换成了"IN"
举例:SELECT cs_name 课程名,cs_type 课程类型
      FROM course
      WHERE cs_id IN
      (
        SELECT cs_id
        FROM teaching
        WHERE tea_id IN
        (
          SELECT tea_id
          FROM teacher
          WHERE tea_name="张三"
        )
       );
(这里我们使用了三个表,来查询“张三”老师所讲授的课程名和课程类型)
  • 6.4.3 关键字子查询(ANY , ALL)

ALL关键字
ALL必须接在一个比较运算符的后面,表示与子查询返回的所有值比较都为TRUE,则返回TRUE。

举例:SELECT position,salary
      FROM tb_salary
      WHERE salary>ALL
      (
	SELECT salary
	FROM tb_salary
	WHERE position='Java'
      );
(查询薪资表中比Java最高工资高的所有员工职位名称和薪资,比所有的都高→大于最大值)


ANY和SOME关键字
ANY与比较操作符联合使用,表示与子查询返回的任何值比较为TRUE,则返回TRUE。SOME是ANY的别名,一般用的比较少。

举例:SELECT position,salary
      FROM tb_salary
      WHERE salary>ANY
      (
	SELECT salary
	FROM tb_salary
	WHERE position='Java'
      );
(查询薪资表中比Java最低工资高的所有员工职位名称和薪资,比任何的都低→小于最小值)

7.SQL语句的编写顺序

SELECT ...
FROM ...
WHERE ... 
GROUP BY ... HAVING ...
ORDER BY...

8.SQL语句的执行顺序

FROM ...
WHERE ...
GROUP BY ... HAVING ...
SELECT ...
ORDER BY ...

那么,以上的所有内容就是博主自己总结的MySQL中常用的一些SQL语句,本篇博客后续还会向其中增添内容,还未100%的完成,因为博主也还在学习数据库的过程中,所以并不是大佬,博文当中或许也会出错,还望谅解!!!

原创文章 433 获赞 456 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_43823808/article/details/105848797