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

文章目录

1.数据库的相关操作

1.1 连接数据库 

1.2 创建数据库 

1.3 查看数据库有哪些 

1.4 查看指定的数据库 

1.5 删除指定的数据库

1.6 使用数据库(很重要) 

1.7 断开服务器的连接 

2.表的相关操作

2.1 创建表 

2.2 查看表的结构 

扫描二维码关注公众号,回复: 11160451 查看本文章

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