MySQL笔记 02

SQL对表中数据的CRUD操作:

插入数据:

insert into 表名 (列名1,列名2,....) values (值1,值2,....);

插入部分:

insert into xuesheng (sid,sname,gender) values (001,"张三","男");

插入全部(列名可以省略):

insert into xuesheng values(002,"李四","男",42);

查看表中数据:

select * from xuesheng;

删除表中数据

delete from 表名 (where 条件);

delete from xuesheng where sid =2;

delete:适用于删除数据较少的//一条一条删除

truncate:适用于删除全表//将表删除再新建

更新表中数据

update 表名 set 列名=列的值,列名2=列的值 (where条件);

update xuesheng set gender='女' where sid=2;

查询记录

select [distinct 去重] [*] [列名] from 表名 (where条件);

实例:
    手机数码,鞋靴箱包
1、  分类id
2、  分类名称
3、  分类描述

create table category(
    cid int primary key auto_increment,
    cname varchar(10),
    cdesc varchar(31)
);

insert into category values (null,'手机数码','电子产品'),
(null,'鞋靴箱包','江南皮革厂'),
(null,'香烟酒水','五牛,茅台'),
(null,'酸奶饼干','娃哈哈'),
(null,'馋嘴零食','瓜子花生,卫龙');

select * from category;
select cid,cdesc from category;


1、  商品id
2、  商品名称
3、  商品价格
4、  生产日期
5、  商品分类

create table product(
    pid int primary key auto_increment,
    pname   varchar(10),
    price   double,
    pdate   timestamp,
    cno int
);

insert into product values(null, '小米',998,null,1),
(null, '锤子',2888,null,1),
(null, '阿迪王',99,null,2),
(null, '老村长',88,null,3),
(null, '茅台',99,null,3),
(null, '奥利奥',5,null,4),
(null, '卫龙',1,null,5),
(null, '饼干',1,null,5);

别名查询:as关键字可以省略
    表别名:
        select p.pname,p.price from product as p;
    列别名:
        select p.pname 名称,p.price 价格 from product p;
 
去掉重复的值:distinct
    select distinct price from product;

select运算查询:( 只改变查询结果,不对表内容改变)
    select *,price*0.9 折后价格 from product;

条件查询where:
    指定条件,确定要操作的记录
        select * from product where price>90;
select * from product where price<>1;(等价于!=)
        
        在10-100之间的数据
        select * from product where price>10 and price<100;
        
        between….and…
        select * from product where price between 10 and 100;
        商品价格小于35或者大于900
        select * from product where price<35 or price>900;

        like模糊查询:
        _:代表一个字符
        %:代表多个字符
    查询出名字带有龙的所有商品
    select * from product where pname like '%龙%';

in 在某个范围内获得值:
    select * from product where cno in (1,4,5);

排序:
        order by
        asc:升序(默认)
        desc:降序
    按照价格降序排序输出
        select * from product order by price desc;
     内容cno为1降序排序
        select * from product where cno=1 order by price desc;

聚合函数:
    sum():求和
    avg():平均值
    conut():计数
    max():最大值
    min():最小值
获得商品价格的总和:
    select sum(price) from product;
获得商品个数:
    select count(*) from product;

!!!where后面不能接聚合函数(条件后面不能接变动的)
    
查出所有大于平均价格的商品;
    select pname 商品名称 from product where price>(select avg(price) from product);

分组group by
    根据cno字段分组分组后统计商品的个数
        select cno 组别,count(*) 计数 from product group by cno;
    根据cno分组,分组统计每组商品的平均价格,并且商品价格>60
    select cno,avg(price) from product group by cno having avg(price)>60;

执行顺序:
    f…w…g…h…s…o
from…where…group by…having…select…order by

多表操作:

​ 需求,多表的关系

​ 外键约束:FORERIGN KEY

​ 给 PRODUCT中的CNO加个一外键约束

​ ALTER TABLE PRODUCT ADD FOREIGN KEY(CNO) REFERENCES CATEGORY(CID);

​ REFERENCES(参考)

主键约束:唯一,不能为空

​ 使用外键都是指向另外一张表的主键

​ 一张表只能有一个主键约束

唯一约束:唯一,可以为空

​ 不可以作为其他表的外键

​ 可以有多个唯一约束

建表原则:

一对多:在多的一方添加一个外键,指向一的一方

多对多:拆分为一对多,创建一张中间表,至少要有两个外键指向原来的表

一对一:合并成一张表,将主键建立关系,将它当做一对多情况处理

多表查询:

交叉连接查询

​ SELECT * FROM PRODUCT;

​ SELECT * FROM CATEGORY;

查询结果无意义:

​ SELECT *FROM PRODUCT,CATEGORY;

过滤出有意义的数据:加WHERE条件:

隐式内连接

SELECT * FROM PRODUCT P,CATEGORY C WHERE P.Cno=C.Cid;

显示内连接:

​ SELECT * FROM PRODUCT P INNER JOIN CATEGORY C ON P.Cno=C.Cid;

区别:

​ 隐式内连接,在查询基础上去做的WHERE条件过滤

​ 显示内连接,带着条件去查询结果执行效率高

外连接:

​ 左外连接,会将左表的数据全部输出,如果表中没有对应的值就用NULL代替

​ SELECT * FROM product P LEFT OUTER JOIN category C ON P.Cno=C.Cid;

​ 右外连接:

连接查询:会将右表所有数据查询,如果左表没有用NULL代替

​ SELECT * FROM product P RIGHT OUTER JOIN category C ON P.Cno=C.Cid;

1683613-20190615103330905-671599827.png

分页查询:

1、 每页显示3条

2、 起始索引0

3、 第一页0

4、 第二页11

起始索引:index 代表显示第几页

每页显示3条数据

STARTINDEX=(INDEX-1)*3;

SELECT * FROM product LIMIT 0,3;

SELECT * FROM product LIMIT 3,3;

子查询(SQL嵌套):

分类名称为手机数码的所有商品

SELECT * FROM product WHERE Cno=(SELECT cid FROM category WHERE cname='手机数码');

视图:

是对查询结果的一个封装,所有数据都来自于原表

1、 能够封装复杂的查询结果

2、 屏蔽表中的细节

语法:CREATE [OR REPLACE] VIEW 视图名称 AS 查询语句 [WITH READ ONLY]

通常不要通过视图修改数据:

create or replace view text as select sid,sname,gender from xuesheng with read only;

可以用来封装复杂的查询语句

转载于:https://www.cnblogs.com/hwx1999/p/11026741.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值