美文网首页
从零学习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