zoukankan      html  css  js  c++  java
  • 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;

    分页查询:

    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;

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

  • 相关阅读:
    Prometheus监控概述
    Zabbix自带模板监控MySQL
    Zabbix ODBC监控MYSQL
    Zabbix LLD 设置过滤条件,过滤某些item
    zabbix 3.4版本预处理
    zabbix proxy分布式监控配置
    zabbix_proxy.conf配置文件参数说明
    zabbix自定义用户key与参数Userparameters监控脚本输出
    zabbix_server.conf配置文件详解
    zabbixAgent配置文件详解zabbix_agentd.conf
  • 原文地址:https://www.cnblogs.com/hwx1999/p/11026741.html
Copyright © 2011-2022 走看看