Sql分类详解及单表curd

2018-11-06  本文已影响0人  dev晴天
再次看下我们的知识架构
image.png
补充:

我们要想操作数据库必须登录数据库软。登录数据库软件的方式有多种

一 数据定义语言-DDL

image.png

1 操作数据库

语法:
1 数据库的创建:
 create database 数据库名
2 数据库的删除:  
 drop database 数据库名   
3 数据库的修改
  一般修改字符集,数据库名 作用不大。

ps:show databases 可查看当前所有的数据库名字
        use 数据库名     可进入指定的数据库中
  

2 操作表

语法:
1 表的创建:
create table 表名(字段描述,字段描述);
字段描述:字段名 字段类型[约束条件]
注意:约束可以不写

例如创建学生(stu)表:
create table stu(id int primary key auto_increment,username varchar(20));

ps: show tables:查看当前数据库下面的所有表

   desc 表名:查看表结构(也就是表的描述)

   show create table 表名:查看建表语句(有时需要吧表拿来写个相似的,可以看过源码直接粘贴)

2 修改表
    2.1修改表名:
        alter table 表名 rename to 新表名
    2.2表添加字段
        alter table 表名 add 列名 字段描述
        例如向stu添加pwd字段
        alter table student1 add pwd varchar(20);
     2.3修改字段名
              alter table 表名 change 字段名称 新字段描述
               例如吧stu表的pwd字段修改为password:
               alter table stu change pwd password varchar(20);  
               注意:修改字段名时字段描述也可以改,如上代码varchar(20)
               也可以写为 int(20),亦可以使用如下2.4代码修改
     2.4修改字段描述
              alter table 表名 modify 字段名称 字段类型[约束]
              例如 alter table stu modify password int;
              注意:这种方式不能修改字段名字 否则报错的
     2.5删除字段
           alter table 表名 drop 字段
           例如删除stu表的 password字段:
             alter table stu drop password;
         收获感觉2.4的语法更灵活可以取代2.5的功能。
  3 删除表:
       drop table 表名; 

二 数据操纵语言-DML

Demo表:


image.png
1 插入
  语法1:insert into 表名 values(字段值1,字段值2.....);

     注意:
     默认给全部字段插入值(上表id,username,pwd字段)
     必须保证values后面的值的类型和顺序与表结构中的一致

     例如:上表的id int类型,username字符类型,pwd字符类型,则你插入 的值必须为 int ,字符,字符类型。
 
      如向上表插入一些值:
      insert into stu values(10,'kate','123');
      注意:上表有三个字段 你value(xxx)xxx也要满足三个值,少一个就不行。

   语法2(常用):
   insert 表名 (字段1,字段2,...)values(值1,值2,...)
   
    注意:
    指定字段插入指定的值
    必须保证values后面的值的类型和顺序与表结构中的一致

    也就是如上表你要向id ,pwd 这两个字段插入值,则:

    insert into stu(id,pwd) values(30,15); 只要类型一致就行,username没 
    插入数据,查询时显示null。(但是你指定两个字段此处你插入三个值或者插入一个就报错,还是少一个也不行)

2 修改

语法:
update 表名 set 字段名1=字段值1,字段名2= 字段名2...[where 条件]

 例如 吧username为tom的用户名改为john
 update stu set username = 'john' where username = 'tom';
 注意:上代码如果不写where条件默认吧所有的用户名改为john
 当然你也可以根据id改变name字段:
 update stu set username = 'kate' where id = 10;吧id为10 的username 改 
 为kate

总结:修改就是修改字段值,根据某一字段值

3 删除
  语法:
 delete from 表名 [where 条件]
 例如删除id为30 的 某项
delete from stu where id = 30;
则id为30 的某一相关信息都会删除。

三 数据查询语言-DQL(非官方叫法)

关键词:select

完整的语法格式:
select 字段  from 表名 where条件  group by 分组字段 having 条件 order by 排序字段  ase|desc(增或者减顺序)
1基本查询:


1 简单的案例:查询表中所有字段信息
select * from products;
2 查看指定的字段信息
select 字段名1,字段名2,.... from table;
例如:
select pname from products;

3查询时还可以去掉重复的字段值:
例如
select distinct price from products;
(多个相同的price 只显示一个)
4 还可以在查询结果上进行运算(+ - *  / 等),但是不会影响数据库中的值。
例如:将所有商品的价格+10元进行显示
select price+10 from products;

5 还可以给查询的结果起个别名
格式 字段名 别名
例如:select price+10 ‘新价格’ from products;
注意 新的字段名最好用字符形式(‘’)否则容易出错(比如新*价格就出错,不用‘’时)


注意:sql的语法 查询的结果是一张新表,显示给你看的。

2 基本条件查询
1 查询所有:
 select * from 表名;
2 指定范围查询
    例如:查询商品价格>60元的所有的商品信息:
    select * from product where price>60;
3.模糊查询
  模糊匹配  格式: 字段名 like "匹配规则"

                 匹配规则:  内容匹配"%"
                            数字匹配"_":_ 代表占个位
 例如:"龙" 值为龙
      "%龙" 值以龙结尾
       "龙%" 值 以龙开头
       "%龙%" 值 包含龙

 案例 查询商品名称中包含”新”的商品:
 select *  from products where pname like "%新%";

4.查询价格为38,68,98的商品
 or 或者in的用法
 or: 或者
 in:(a,b,c):满足 含有a,或者b 或者 c的。
and 并且
例如:
select * from products where price=38 or price=68 or price = 98;
select * from products where price in(38,68,98);

5 查询所有薪资在 50 -70之间的
   select * from products where price between 50 and 70;
   select * from products where price >=50 and price<=70 ; 
小总结:
where后的条件写法:
     > ,<,=,>=,<=,<>
     like 使用占位符 _ 和 %  _代表一个字符 %代表任意个字符. 

      in:在某个范围中获得值.(值不一定连续)
      between num1 and num2 :代表在某一连续区间 例如[num1,num2]   

3 高级查询

案例驱动举例子:
1 排序查询
    查询所有的商品,按价格进行排序.(asc-升序,desc-降序)
      select * from products order by price desc;(降序)
    查询名称有“新”的商品的信息并且按价格降序排序.
      select * from products where pname like"%新%"order by price desc;
2 聚合函数
 sum(字段)求和
 avg(字段) 平均值
 max(字段) 最大值
 min(字段) 最小值
 count(字段) 总数
 round(数字,保留小数位数)  四舍五入
 
 注意:
  以前我们操作的都是行的数据,而聚合函数操作的是列的数据 并且返回 
  一个结果,但是聚合函数会忽略null的值。

  获得所有商品的价格的总和:
  select sum(price) from products ;

  获得商品表中价格的平均数:
   select round(avg(price),2) from products ;

  获得商品表中有多少条记录(多少个字段)
  select count(*) from products ;

3 分组
语法要求满足:在where的后面 在order by 前面
***一般分组伴随着聚合函数***

语法:
根据某字段分组,伴随聚合函数(一般分组都伴随聚合) from 表 group by 字段
select 字段,聚合函数 from table group by 字段

举个栗子:
根据cno字段分组,分组后统计商品的个数
select cno,count(cno) from products group by cno;

*******************************再举个重要的栗子******************************
根据cno分组,分组统计每组商品的总数量,并且总数量> 200;

select cno,sum(pnum) from products group by cno having sum(pnum)>200;
 
注意: where 与having 的区别:
           where是对分组前的数据进行过滤 having是对分组后的数据进行过滤
           where 后面不能使用聚合函数 having可以

上一篇下一篇

猜你喜欢

热点阅读