SQL基础

​​​​​​SQL语句分类

数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等

数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insertdeleteupdate

数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。

数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:selectfromwhere

DDL表操作

  1.创建表

create table 表名(
   字段名 类型(长度) [约束],
   字段名 类型(长度) [约束],
   ...
);
类型:
	varchar(n)	字符串
	int			整形
	double		浮点
	date		时间
	timestamp	时间戳
约束:(详情查看第四章)
	primary key	主键,被主键修饰字段中的数据,不能重复、不能为null。
例如:
###创建分类表
CREATE TABLE category (
  cid INT primary key, #分类ID 
  cname VARCHAR(100) #分类名称
);

  2.查看表

    * 查看数据库中的所有表:show tables;

    * 查看表结构:desc 表名;

  3.删除表

    * drop table 表名

  4.修改表结构格式:

 1).alter table 表名 add 列名 类型(长度) [约束];    
    作用:修改表添加列. 
    例如:
    为分类表添加一个新的字段为 分类描述 varchar(20)
    ALTER TABLE category ADD `desc` VARCHAR(20);

 2).alter table 表名 modify 列名 类型(长度) 约束;  
    作用:修改表修改列的类型长度及约束.
    注意: 如果有数据,必须注意数据类型varchar-->int 容易有错误数据
    例如:
    为分类表的描述字段进行修改,类型varchar(50) 添加约束 not null
    ALTER TABLE category MODIFY `desc` VARCHAR(50) NOT NULL;

 3).alter table 表名 change 旧列名 新列名 类型(长度) 约束; 
    作用:修改表修改列名.
    例如:
    为分类表的分类名称字段进行更换 更换为 description varchar(30)
    ALTER TABLE category CHANGE `desc`description VARCHAR(30);

 4).alter table 表名 drop 列名;    
    作用:修改表删除列.
    注意: 如果列中有数据,数据就会一起删除了,需谨慎
    例如:
    删除分类表中description这列
    ALTER TABLE category DROP description;

 5).rename table 表名 to 新表名; 
    作用:修改表名
    例如:
    为分类表category 改名成 category2
    RENAME TABLE category TO category2;

 6).alter table 表名 character set 字符集(了解);
    作用:修改表的字符集
    注意:不建议执行,有可能会产生乱码
    例如:
    为分类表 category 的编码表进行修改,修改成 gbk
    ALTER TABLE category CHARACTER SET gbk;

DML表操作

  1.插入(insert)

      * 向表中插入某些字段:insert into 表 (字段1,字段2,字段3..) values  (值1,值2,值3..); 

      * 向表中插入所有字段,字段的顺序为创建表时的顺序:insert into 表 values (值1,值2,值3..);

  2.删除(delete || truncate

      * delete from 表名 [where 条件]; (delete 一条一条删除,不清空auto_increment记录数)

      * truncate table 表名;                   (truncate 直接将表删除,重新建表,auto_increment将置为零,从新开始)

  3.修改(update)

      * 更新所有记录的指定字段:update 表名 set 字段名=值,字段名=值,...;

      * 更新符合条件记录的指定字段:update 表名 set 字段名=值,字段名=值,... where 条件过滤;

DQL查询语句(单表)

  1.查询指定字段信息

      select 字段1,字段2,...from 表名;

  2.distinct用于去除重复记录

      select distinct 字段 from 表名;

  3.表别名格式:(使用的as关键字,as可以省略)

      select 字段名 as 别名 from 表名;

      select 字段名 别名 from 表名;

  4.条件查询

    1).查询商品名称为“花花公子”的商品所有信息:
        SELECT * FROM product WHERE pname = '花花公子'

    2).查询价格为800商品
        SELECT * FROM product WHERE price = 800

    3).查询价格不是800的所有商品
        SELECT * FROM product WHERE price != 800
        SELECT * FROM product WHERE price <> 800
        SELECT * FROM product WHERE NOT(price = 800)

    4).查询商品价格大于60元的所有商品信息
        SELECT * FROM product WHERE price > 60;

    5).查询商品价格在200到1000之间所有商品
        SELECT * FROM product WHERE price >= 200 AND price <=1000;
        SELECT * FROM product WHERE price BETWEEN 200 AND 1000;

    6).查询商品价格是200或800的所有商品
        SELECT * FROM product WHERE price = 200 OR price = 800;
        SELECT * FROM product WHERE price IN (200,800);

    7).查询名称以'香'开头的所有商品
        SELECT * FROM product WHERE pname LIKE '香%';

    8).查询名称含有'霸'字的所有商品
        SELECT * FROM product WHERE pname LIKE '%霸%';

    9).查询出名称中是五个字的所有商品
        SELECT * FROM product WHERE pname LIKE '_____';

    10).查询名称第二个字为'想'的所有商品
        SELECT * FROM product WHERE pname LIKE '_想%';

    11).查询商品名称是null的值
        SELECT * FROM product WHERE pname IS NULL;

    12).查询商品名称不是null的值
        SELECT * FROM product WHERE pname IS NOT NULL;

  5.排序查询

    * 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后

      SELECT * FROM 表名 ORDER BY 排序字段 ASC|DESC;

      ASC 升序 (默认)

      DESC 降序

    * 使用价格排序(升序)

      SELECT * FROM product ORDER BY price DESC;

    * 显示商品的价格(去重复),并排序(降序)

      SELECT DISTINCT price FROM product ORDER BY price DESC;

  6.聚合查询    

      count:统计指定列不为NULL的记录行数;
        SELECT COUNT(*) FROM product WHERE price > 200;

      sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
        SELECT SUM(price) FROM product;

      min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
        SELECT MIN(price)FROM product;

      max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
        SELECT MAX(price) FROM product;
        
      avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
 
       SELECT AVG(price) FROM product;

  7.分组查询

    分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where

    having与where的区别:

       * having是在分组后对查询的结果再次进行过滤,having后面可以使用分组函数(统计函数)

       * where是在分组前对数据进行过滤,where后面不可以使用分组函数

   格式 : 

      * SELECT 字段1,字段2… FROM 表名GROUP BY分组字段 HAVING 分组条件;

   栗子:

     * 统计所有商品名字相同的商品,进行分组求和计算

       SELECT pname,SUM(price) FROM product GROUP BY pname;

     * 求和后的数据只显示1000以上的

       SELECT pname,SUM(price) p FROM product GROUP BY pname HAVING p>1000;

 

你可能感兴趣的:(SQL)