美文网首页
从零学习MySQL

从零学习MySQL

作者: 李小二的倔强 | 来源:发表于2024-04-05 19:56 被阅读0次

sql语句不区分大小写

SQL语言的分类:

DDL:数据库定义语言,用来定义逻辑数据库、表、列、等信息。
使用的关键字:create(创建)、alter(修改)、drop(删除)
DCL:数据控制语言,用来定义用户、以及权限等信息。
DML:数据操作语言,用来操作表数据。
使用的关键字:insert(添加)、update(修改)、delete(删除)
DQL:数据库查询语言:用来查询数据的。使用的关键字:select......from......where......

一、DDL:数据库相关操作语句

1、创建数据库:
  create   database   数据库名称;
  create   database   数据库名称   character   set   字符集;
2、查看当前mysql中的所有数据库:
  show   databases;
3、查看某个数据库的定义信息:
  show  create  database  数据库名;
4、删除数据库:
  drop  database  数据库名;
5、查看当前正在使用的数据库:
  select  database();
6、切换数据库
  use  数据库名;

表操作相关的SQL语句(重点)

1、创建表:
    create  table  表名(
              字段名1    数据类型(长度)   [约束],
              字段名2    数据类型(长度)   [约束],
              字段名3    数据类型(长度)   [约束],
              ......                                               ,
              字段名n    数据类型(长度)   [约束]  //注意:最后一个字段后边不加“,”。
        )
  
    create  table  student (
           name  vachar(32),
           age   int,
           sex   char(1)
    );
2、查看数据库中的所有表;
  show  tables;
3、查看表结构
  desc table;  
4、删除表
  drop  table  表名;
5、修改表:
1).作用:修改表添加列. 
    alter table 表名 add 列名 类型(长度) [约束];         
    例如:
    #1,为分类表添加一个新的字段为 分类描述 varchar(20)
    ALTER TABLE category ADD `desc` VARCHAR(20);
2).作用:修改表修改列的类型长度及约束.
   alter table 表名 modify 列名 类型(长度) 约束;       
    例如:
    #2, 为分类表的描述字段进行修改,类型varchar(50) 添加约束 not null
    ALTER TABLE category MODIFY `desc` VARCHAR(50) NOT NULL;
3).作用:修改表修改列名.
    alter table 表名 change 旧列名 新列名 类型(长度) 约束;        
    例如:
    #3, 为分类表的分类名称字段进行更换 更换为 description varchar(30)
    ALTER TABLE category CHANGE `desc` description VARCHAR(30);
4).作用:修改表删除列.
    alter table 表名 drop 列名;             
    例如:
    #4, 删除分类表中description这列
    ALTER TABLE category DROP description;
5).作用:修改表名
    rename table 表名 to 新表名;             
    例如:
    #5, 为分类表category 改名成 category2
    RENAME TABLE category TO category2;
6).作用:修改表的字符集
    alter table 表名 character set 字符集(了解);             
    例如:
    #6, 为分类表 category 的编码表进行修改,修改成 gbk
    ALTER TABLE category CHARACTER SET gbk;

二、DML:数据操作语言(记录操作相关的SQL语句<重点掌握>)

1、添加:有两种语句:
    A).insert into 表名 values(值1,值2,...,值n);
       例如:
        insert into s3 values('wangwu',25);
       注意:
       1).表中有多少字段,values()里面就必须要出现几个值。不添加的字段,使用null占位。
        insert into s3 values('zhouliu',null);
       2).SQL语句中,"值"如果是"字符串/日期"类型,必须要使用一对单引号,或者一对双引号括起来。
                         如果是"数值"类型,可以不加引号。
    B).insert into 表名(字段1,字段2,...,字段n) values(值1,值2,...,值n)
       例如:
        insert into s3(age) values(23);
       注意:
       1).字段列表:可以是部分字段;也可以不按定义顺序出现;
       2).值列表:必须同前面的"字段列表"保持数量、顺序一致。没有出现的字段,本次默认添加:null

    怎样选择:
    1).如果添加所有字段,使用A;
    2).如果添加部分字段,使用B;

2、修改:
    update 表名 set 字段1 = 值1,字段2 = 值2 ,...., 字段n = 值n where 条件;(所有符合条件的记录全部被修改)
    例如:
    update s3 set age = 23 , stuName = 'zhouliu' where stuName = 'zhagnsan';
    

3、删除:
    delete from 表名 where 条件(所有符合条件的记录全部被删除)
    例如:
    delete from s3 where stuName = 'zhangsan';

三、DQL:数据库查询语言:

1、去重查询和列值计算
1).去重查询:
    select  distinct  属性名  from  表名;
    例如:
        select distinct category_id from product;  

1).对列值进行运算:
    select pname,price + 100 from product;
    注意:只对查询结果的price增加100,表中的原值不变。   
2、条件查询

1)、比较运算符:

    1). > : 大于;常用:"数值类型"和"日期类型"
        例如:查询所有价格高于2000元的商品信息
            select * from product where price > 2000;
              查询所有生产日期大于2017年12月01日的商品
            select * from product where prodate > '2017-12-01';
    2). < : 小于;常用:"数值类型"和"日期类型"
        例如:查询所有价格低于2000元的商品信息
            select * from product where price < 2000;
              查询所有生产日期小于2017年12月01日的商品
            select * from product where prodate < '2017-12-01';
    3). >= : 大于等于:常用:"数值类型"和"日期类型"
        例如:查询所有价格大于等于2000元的商品信息
            select * from product where price >= 2000;
              查询所有生产日期大于等于2017年12月01日的商品
            select * from product where prodate >= '2017-12-01';
    4). <= : 小于等于:常用:"数值类型"和"日期类型"
        例如:查询所有价格小于等于2000元的商品信息
            select * from product where price <= 2000;
              查询所有生产日期小于等于2017年12月01日的商品
            select * from product where prodate <= '2017-12-01';
    5). =  : 等于:任何类型字段:"数值类型"、"日期类型"、"字符串类型"
        例如:查询所有价格等于2000元的商品信息
            select * from product where price = 2000;
              查询所有生产日期等于2017年12月01日的商品
            select * from product where prodate = '2017-12-01';
              查询商品名称等于"劲霸"的商品信息:
            select * from product where pname = '劲霸';
        
    6). != : 不等于:任何类型字段:"数值类型"、"日期类型"、"字符串类型"
        例如:查询所有价格不等于2000元的商品信息
            select * from product where price != 2000;
              查询所有生产日期不等于2017年12月01日的商品
            select * from product where prodate != '2017-12-01';
              查询商品名称不等于"劲霸"的商品信息:
            select * from product where pname <> '劲霸';
        <> : 不等于

2)、逻辑运算符:

    1).and : 逻辑与,语义:"并且"
        例如:查询价格高于2000元的电脑类商品
            select * from product where price > 2000 and category_id = '电脑';
              查询2017年12月份生产的商品
            select * from product where prodate >= '2017-12-01' and prodate <= '2017-12-31';

    2).or  : 逻辑或,语义:"或者"
        例如:查询不是在2017年12月份生产的商品
            select * from product where prodate < '2017-12-01' or prodate > '2017-12-31';
              查询服装类和电脑类的所有商品
            select * from product where category_id = '服装' or category_id = '电脑';
    3).not : 逻辑非,语义:"不是.."
        例如:查询不是在2017年12月份生产的商品
            select * from product where not(prodate >= '2017-12-01' and prodate <= '2017-12-31');

3)、范围查询:

    between ...(包含)(小值) and ...(包含)(大值)
    例如:查询商品价格在1000元到3000元之间的商品
        select * from product where price >= 1000 and price <= 3000;
        或者:
        select * from product where price between 1000 and 3000;
          查询在2017年12月份生产的商品:
        select * from product where prodate between '2017-12-01' and '2017-12-31';

4)、IN语句:

    代替多个or的等性判断的。
    例如:查询商品价格等于:1000元、2000元、3000元、4000元的商品
        select * from product where price = 1000 or price = 2000 or price = 3000 or price = 4000;
        使用in语句:
        select * from product where price in (1000,2000,3000,4000);

          查询服装类和电脑类商品:
        select * from product where category_id in('服装','电脑');

5)、模糊查询:

    like 通配符:"%":通配任意长度的字符;"_":通配一个长度的字符;
    例如:查询商品名称中包含"花"的商品:
        select * from product where pname like '%花%';
          查询商品名称中以"花"开头,名称一共只有两个字的商品
        select * from product where pname like '花_';

6)、查询"NULL":

    例如:添加:insert into product values(13,'果9’,1,null,null);
          查询:select * from product where category_id = null ; //错误,不成查询出结果
                select * from product where category_id is null; //正确。
                -------------------------------------------------
          添加:insert into product values(14,'果10',2,'','');
          查询:select * from product where category_id = '';
3、排序:
1).有些时候,我们需要对查询结果进行按某列进行排序,这时,使用排序语句:order by 排序字段 asc(升序--默认) / desc(降序)
2).例如:
    1).查询商品信息,将结果按价格升序排序:
        select * from product order by price asc;
    2).查询所有的服装类商品,将查询结果按"生产日期"降序排序:
        select * from product where category_id = '服装' order by prodate desc;
    3).对多列进行排序:查询服装类商品信息,将结果按"生产日期"降序排序,如果生产日期相同,按价格升序排序。
        select * from product where category_id = '服装' order by prodate desc , price asc;
       注意:只有当第一排序列的值相同时,才会按第二排序列排,否则,会忽略第二排序列。
4、SQL查询_聚合函数:
1).count(*/字段名):统计指定列不为NULL的记录"行数";
    例如:查询服装类商品共有多少个?
        select count(*) from product where category_id = '服装';
2).sum(字段名):计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
    例如:查询服装类商品的总价格:
        select sum(price) from product where category_id = '服装';
3).max(字段名):计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
    例如:查询服装类商品的最贵的。
        select max(price) from product where category_id = '服装';
4).min(字段名):计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
    例如:查询服装类商品的最便宜的。
        select min(price) from product where category_id = '服装';
5).avg(字段名):计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
    例如:查询服装类商品的平均价格。
        select avg(price) from product where category_id = '服装';

注意:对于"聚合函数"的查询结果中,只能包含"聚合函数的结果列"(如果有分组,还可以包含分组列),
不能包含其他列,因为聚合的结果是计算出来的,跟表中的任何一条数据没有关系,所以不能关联显示其它列的值。

5、分组:
1).需求:一条语句查询出:每种商品的总价格是多少?
        商品类别    总价格
        服装      ...
        电脑      ...
        食品      ...
        化妆品     ...
   SQL语句:select category_id , sum(price) from product group by category_id;

2).练习:有以下学员信息表:
     学员表:
     ID 姓名  性别  年龄  学科
     1  张三  男   22  JavaEE
     2  李四  男   23  IOS
     3  王五  女   18  JavaEE
     4  周六  女   17  JavaEE
     5  周日  女   21  IOS

    A).查询各科各有多少学员?
        select 学科,count(*) from 学员表 group by 学科;
    B).查询男、女学员各有多少人:
        select 性别,count(*) from 学员表 group by 性别;
    C).查询各科中男、女学员各有多少人:
        结果:
        学科  性别  人数
        JavaEE  男   1
        JavaEE  女   2
        IOS 男   1
        IOS 女   1

        select 学科,性别,count(*) from 学员表 group by 学科,性别;
3).注意:分组查询的结果:只能包含"分组字段"和"聚合结果字段",不要包含其它字段。
6、SQL查询_having子句:
1).需求:查询每种商品的总价格是多少,结果只列出总价格大于2000元的,其它的就不要显示了。
     可能会想这样写:
        select category_id, sum(price) from product where sum(price) > 2000 group by category_id;//错误的
            因为:where先执行,那时还没有执行sum()聚合函数,所以where 不能对聚合函数的结果进行筛选。
     使用having对聚合的结果进行筛选:
        select category_id , sum(price) from product group by category_id having sum(price) > 2000;
    
2).书写顺序:select ... from ... where ... group by ... having ... order by ...
   执行顺序:
   1).from
   2).where
   3).group by
   4).聚合函数
   5).having
   6).select
   7).order by

相关文章

网友评论

      本文标题:从零学习MySQL

      本文链接:https://www.haomeiwen.com/subject/xpugtjtx.html