常用的SQL语句(SQL语句具体版,以MySQL为例)

打印 上一主题 下一主题

主题 825|帖子 825|积分 2475

常用的SQL语句(SQL语句具体版,以MySQL为例)

留意:SQL巨细写都可以使用
1、DDL:操作数据库

操作数据库重要就是对数据库的增删查操作。
1.1 查询所有的数据库

  1. show databases;
复制代码
1.2 创建数据库



  • 创建数据库
  1. create database 数据库名称;
复制代码


  • 创建数据库(判断,如果不存在则创建)
  1. create database if not exists 数据库名称;
复制代码
1.3 删除数据库



  • 删除数据库
  1. drop database 数据库名称;
复制代码


  • 删除数据库(判断,如果存在则删除)
  1. drop database if exists 数据库名称;
复制代码
1.4 使用数据库

数据库创建好了,要在数据库中创建表,得先明确在哪儿个数据库中操作,此时就须要使用数据库。


  • 使用数据库
  1. use 数据库名称;
复制代码


  • 检察当前使用的数据库
  1. select database();
复制代码
2、DDL:操作表

操作表也就是对表进行增(Create)删(Retrieve)改(Update)查(Delete)。
2.1 查询表



  • 查询当前数据库下所有表名称
  1. show tables;
复制代码


  • 查询表布局
  1. desc 表名称;
复制代码
2.2 创建表



  • 创建表
  1. create table 表名 (
  2.         字段名1  数据类型1,
  3.         字段名2  数据类型2,
  4.         …
  5.         字段名n  数据类型n
  6. );
  7. 例如:
  8. create table tb_user (
  9.                 id int,
  10.     username varchar(20),
  11.     password varchar(32)
  12. );
复制代码
2.3 表的数据类型

MySQL 支持多种类型,可以分为三类:


  • 数值
    1. tinyint : 小整数型,占一个字节
    2. int        : 大整数类型,占四个字节
    3.         eg : age int
    4. double : 浮点类型
    5.         使用格式: 字段名 double(总长度,小数点后保留的位数)
    6.         eg : score double(5,2)   
    复制代码
  • 日期
    1. date : 日期值。只包含年月日
    2.         eg :birthday date :
    3. datetime : 混合日期和时间值。包含年月日时分秒
    复制代码
  • 字符串
    1. char : 定长字符串。
    2.         优点:存储性能高
    3.         缺点:浪费空间
    4.         eg : name char(10)  如果存储的数据字符个数不足10个,也会占10个的空间
    5. varchar : 变长字符串。
    6.         优点:节约空间
    7.         缺点:存储性能底
    8.         eg : name varchar(10) 如果存储的数据字符个数不足10个,那就数据字符个数是几就占几个的空间       
    复制代码
创建表案例:

  1. 需求:设计一张学生表,请注重数据类型、长度的合理性
  2.         1. 编号
  3.         2. 姓名,姓名最长不超过10个汉字
  4.         3. 性别,因为取值只有两种可能,因此最多一个汉字
  5.         4. 生日,取值为年月日
  6.         5. 入学成绩,小数点后保留两位
  7.         6. 邮件地址,最大长度不超过 64
  8.         7. 家庭联系电话,不一定是手机号码,可能会出现 - 等字符
  9.         8. 学生状态(用数字表示,正常、休学、毕业...)
复制代码
语句设计如下:
  1. create table student (
  2.         id int,
  3.     name varchar(10),
  4.     gender char(1),
  5.     birthday date,
  6.     score double(5,2),
  7.     email varchar(15),
  8.     tel varchar(15),
  9.     status tinyint
  10. );
复制代码


2.4 删除表



  • 删除表
  1. drop table 表名;
复制代码


  • 删除表时判断表是否存在
  1. drop table if exists 表名;
复制代码
2.5 修改表



  • 修改表名
  1. alter table 表名 rename to 新的表名;
  2. -- 将表名student修改为stu
  3. alter table student rename to stu;
复制代码


  • 添加一列
  1. alter table 表名 add 列名 数据类型;
  2. -- 给stu表添加一列address,该字段类型是varchar(50)
  3. alter table stu add address varchar(50);
复制代码


  • 修改数据类型
  1. alter table 表名 modify 列名 新数据类型;
  2. -- 将stu表中的address字段的类型改为 char(50)
  3. alter table stu modify address char(50);
复制代码


  • 修改列名和数据类型
  1. alter table 表名 change 列名 新列名 新数据类型;
  2. -- 将stu表中的address字段名改为 addr,类型改为varchar(50)
  3. alter table stu change address addr varchar(50);
复制代码


  • 删除列
  1. alter table 表名 drop 列名;
  2. -- 将stu表中的addr字段 删除
  3. alter table stu drop addr;
复制代码
3、DML:操作表中的数据

DML重要是对数据进行增(insert)删(delete)改(update)操作。
3.1 添加数据



  • 给指定列添加数据
  1. insert into 表名(列名1,列名2,…) values(值1,值2,…);
复制代码


  • 给全部列添加数据
  1. insert into 表名 values(值1,值2,…);
复制代码


  • 批量添加数据
  1. insert into 表名(列名1,列名2,…) values(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
  2. insert into 表名 values(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
复制代码


  • 练习
为了演示以下的增删改操作是否操作成功,故先将查询所有数据的语句先容给大家:
  1. select * from stu;
复制代码
  1. -- 给指定列添加数据
  2. insert into stu (id, name) values (1, '张三');
  3. -- 给所有列添加数据,列名的列表可以省略的
  4. insert into stu (id,name,sex,birthday,score,email,tel,status) values (2,'李四','男','1999-11-11',88.88,'lisi@itcast.cn','13888888888',1);
  5. insert into stu values (2,'李四','男','1999-11-11',88.88,'lisi@itcast.cn','13888888888',1);
  6. -- 批量添加数据
  7. insert into stu values
  8.         (2,'李四','男','1999-11-11',88.88,'lisi@itcast.cn','13888888888',1),
  9.         (2,'李四','男','1999-11-11',88.88,'lisi@itcast.cn','13888888888',1),
  10.         (2,'李四','男','1999-11-11',88.88,'lisi@itcast.cn','13888888888',1);
复制代码
3.2 修改数据



  • 修改表数据
  1. update 表名 set 列名1=值1,列名2=值2,… [where 条件] ;
复制代码
  留意:
  

  • 修改语句中如果不加条件,则将所有数据都修改!
  • 像上面的语句中的中括号,表示在写sql语句中可以省略这部分
  

  • 练习

    • 将张三的性别改为女
      1. update stu set sex = '女' where name = '张三';
      复制代码
    • 将张三的生日改为 1999-12-12 分数改为99.99
      1. update stu set birthday = '1999-12-12', score = 99.99 where name = '张三';
      复制代码
    • 留意:如果update语句没有加where条件,则会将表中所有数据全部修改!
      1. update stu set sex = '女';
      复制代码
      上面语句的实行完后查询到的结果是:

3.3 删除数据



  • 删除数据
  1. delete from 表名 [where 条件] ;
复制代码


  • 练习
  1. -- 删除张三记录
  2. delete from stu where name = '张三';
  3. -- 删除stu表中所有的数据
  4. delete from stu;
复制代码
4、DQL:数据的查询

完整语法
  1. select
  2.     字段列表
  3. from
  4.     表名列表
  5. where
  6.     条件列表
  7. group by
  8.     分组字段
  9. having
  10.     分组后条件
  11. order by
  12.     排序字段
  13. limit
  14.     分页限定
复制代码
4.1 底子查询

4.1.1 语法



  • 查询多个字段
  1. select 字段列表 from 表名;
  2. select * from 表名; -- 查询所有数据
复制代码


  • 去除重复记录
  1. select distinct 字段列表 from 表名;
复制代码


  • 起别名
  1. as: as 也可以省略
复制代码
4.1.2 练习



  • 查询name、age两列
  1. select name,age from stu;
复制代码


  • 查询所有列的数据,列名的列表可以使用*替代
  1. select * from stu;
复制代码


  • 查询地址信息
  1. select address from stu;
复制代码


  • 去除重复记录
    1. select distinct address from stu;
    复制代码
  • 查询姓名、数学成绩、英语成绩。并通过as给math和english起别名(as关键字可以省略)
    1. select name,math as 数学成绩,english as 英文成绩 from stu;
    2. select name,math 数学成绩,english 英文成绩 from stu;
    复制代码
4.2 条件查询

4.2.1 语法

  1. select 字段列表 from 表名 where 条件列表;
复制代码


  • 条件
条件列表可以使用以下运算符
符号功能>大于<小于>=大于等于<=小于等于=等于<> 或 !=不等于between… and…在某个范围之内(都包罗)in(…)多选一like 占位符模糊查询 _单个恣意字符 %多个恣意字符is NULL是NULLis NO NULL不是NULLand 或 &&而且or 或 ||大概not 或 !非,不是 4.2.2 条件查询练习



  • 查询年岁大于20岁的学员信息
    1. select * from stu where age > 20;
    复制代码
  • 查询年岁大于等于20岁的学员信息
    1. select * from stu where age >= 20;
    复制代码
  • 查询年岁大于等于20岁 而且 年岁 小于等于 30岁 的学员信息
    1. select * from stu where age >= 20 &&  age <= 30;
    2. select * from stu where age >= 20 and  age <= 30;
    复制代码
          上面语句中 && 和 and 都表示而且的意思。建议使用 and 。
        也可以使用 between … and 来实现上面需求
       
    1. select * from stu where age BETWEEN 20 and 30;
    复制代码
  • 查询入学日期在’1998-09-01’ 到 ‘1999-09-01’ 之间的学员信息
    1. select * from stu where hire_date BETWEEN '1998-09-01' and '1999-09-01';
    复制代码
  • 查询年岁等于18岁的学员信息
    1. select * from stu where age = 18;
    复制代码
  • 查询年岁不等于18岁的学员信息
    1. select * from stu where age != 18;
    2. select * from stu where age <> 18;
    复制代码
  • 查询年岁等于18岁 大概 年岁等于20岁 大概 年岁等于22岁的学员信息
    1. select * from stu where age = 18 or age = 20 or age = 22;
    2. select * from stu where age in (18,20 ,22);
    复制代码
  • 查询英语成绩为 null的学员信息
    null值的比较不能使用 = 大概 != 。须要使用 is 大概 is not
    1. select * from stu where english = null; -- 这个语句是不行的
    2. select * from stu where english is null;
    3. select * from stu where english is not null;
    复制代码
4.2.3 模糊查询练习

   模糊查询使用like关键字,可以使用通配符进行占位:
  (1)_ : 代表单个恣意字符
  (2)% : 代表恣意个数字符
  

  • 查询姓’马’的学员信息
    1. select * from stu where name like '马%';
    复制代码
  • 查询第二个字是’花’的学员信息
    1. select * from stu where name like '_花%';
    复制代码
  • 查询名字中包罗 ‘德’ 的学员信息
    1. select * from stu where name like '%德%';
    复制代码
4.3 排序查询

4.3.1 语法

  1. select 字段列表 from 表名 order by 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …;
复制代码
上述语句中的排序方式有两种,分别是:


  • ASC : 升序排列 (默认值)
  • DESC : 降序排列
   留意:如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序
  4.3.2 练习



  • 查询学生信息,按照年岁升序排列
    1. select * from stu order by age ;
    复制代码
  • 查询学生信息,按照数学成绩降序排列
    1. select * from stu order by math desc ;
    复制代码
  • 查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列
    1. select * from stu order by math desc , english asc ;
    复制代码
4.4 聚合函数

4.4.1 概念

将一列数据作为一个团体,进行纵向计算。
现有一需求让我们求表中所有数据的数学成绩的总和。这就是对math字段进行纵向求和。
4.4.2 聚合函数分类

函数名功能count(列名)统计数目(一样平常选用不为null的列)max(列名)最大值min(列名)最小值sum(列名)求和avg(列名)均匀值 4.4.3 聚合函数语法

  1. select 聚合函数名(列名) from 表;
复制代码
  留意:null 值不加入所有聚合函数运算
  4.4.4 练习



  • 统计班级一共有多少个学生
    1. select count(id) from stu;
    2. select count(english) from stu;
    复制代码
    上面语句根据某个字段进行统计,如果该字段某一行的值为null的话,将不会被统计。所以可以在count(*) 来实现。* 表示所有字段数据,一行中也不可能所有的数据都为null,所以建议使用 count(*)
    1. select count(*) from stu;
    复制代码
  • 查询数学成绩的最高分
    1. select max(math) from stu;
    复制代码
  • 查询数学成绩的最低分
    1. select min(math) from stu;
    复制代码
  • 查询数学成绩的总分
    1. select sum(math) from stu;
    复制代码
  • 查询数学成绩的均匀分
    1. select avg(math) from stu;
    复制代码
  • 查询英语成绩的最低分
    1. select min(english) from stu;
    复制代码
4.5 分组查询

4.5.1 语法

  1. select 字段列表 from 表名 [where 分组前条件限定] group by 分组字段名 [having 分组后条件过滤];
复制代码
  留意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
  4.5.2 练习



  • 查询男同学和女同学各自的数学均匀分
    1. select sex, avg(math) from stu group by sex;
    复制代码
          留意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
       
    1. select name, sex, avg(math) from stu group by sex;  -- 这里查询name字段就没有任何意义
    复制代码
  • 查询男同学和女同学各自的数学均匀分,以及各自人数
    1. select sex, avg(math),count(*) from stu group by sex;
    复制代码
  • 查询男同学和女同学各自的数学均匀分,以及各自人数,要求:分数低于70分的不加入分组
    1. select sex, avg(math),count(*) from stu where math > 70 group by sex;
    复制代码
  • 查询男同学和女同学各自的数学均匀分,以及各自人数,要求:分数低于70分的不加入分组,分组之后人数大于2个的
    1. select sex, avg(math),count(*) from stu where math > 70 group by sex having count(*)  > 2;
    复制代码
where 和 having 区别:


  • 实行时机不一样:where 是分组之进步行限定,不满足where条件,则不加入分组,而having是分组之后对结果进行过滤。
  • 可判断的条件不一样:where 不能对聚合函数进行判断,having 可以。
4.6 分页查询

接下来我们先说分页查询的语法。
4.6.1 语法

  1. select 字段列表 from 表名 limit  起始索引 , 查询条目数;
复制代码
  留意: 上述语句中的起始索引是从0开始
  4.6.2 练习



  • 从0开始查询,查询3条数据
    1. select * from stu limit 0 , 3;
    复制代码
  • 每页显示3条数据,查询第1页数据
    1. select * from stu limit 0 , 3;
    复制代码
  • 每页显示3条数据,查询第2页数据
    1. select * from stu limit 3 , 3;
    复制代码
  • 每页显示3条数据,查询第3页数据
    1. select * from stu limit 6 , 3;
    复制代码
从上面的练习推导出起始索引计算公式:
  1. 起始索引 = (当前页码 - 1) * 每页显示的条数
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

愛在花開的季節

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表