与MySQL的零距离接触--笔记(余下部分)

本文详细介绍了MySQL中的子查询使用,包括ANY、SOME、ALL关键字的应用,以及NOT IN和EXISTS子查询。还讨论了如何通过INSERT、UPDATE和CREATE TABLE...SELECT语句将查询结果写入数据表。此外,文章涵盖了多表更新、连接操作、添加和删除唯一约束,以及统计分析如GROUP BY和HAVING子句的用法。
摘要由CSDN通过智能技术生成

SET NAMES gbk;

SELECT * FROM tdb_goods\G;
\G 的作用是将查到的结构旋转90度变成纵向

子查询(subquery)是指出现在其他SQL语句内的SELECT子句.
子查询指嵌套在查询内部,且必须始终出现在圆括号内.
子查询可以包含多个关键字或条件,DISTINCT,GROUP BY,ORDER BY,LIMIT,函数
子查询的外层查询可以是,SELECT,INSERT,UPDATE,SET或DO.

使用比较运算符的子查询
SELECT goods_name, goods_price FROM tdb_goods WHERE goods_price >= (SELECT ROUND(AVG(goods_price),2) FROM tdb_goods);


SELECT goods_id, goods_name, goods_price FROM tdb_goods WHERE goods_price > (select goods_price FROM tdb_goods WHERE goods_cate='超级本');
ERROR 1242 (21000): subquery returns more than 1 row
返回多条结果,子查询.


ANY, SOME, ALL关键字
SELECT goods_id, goods_name, goods_price FROM tdb_goods WHERE goods_price > ANY (select goods_price FROM tdb_goods WHERE goods_cate='超级本');

> ANY,最低价以上就行
> ALL.大于子查询的最大值
※类似逻辑理解.

使用[NOT] IN的子查询

=ANY查询与IN相同

使用[NOT] EXISTS子查询

将查询结果写入数据表
INSERT tdb_goods_cates(cate_name) SELECT goods_cate FROM tdb_goods group by goods_cate;

多表更新(参照其他表信息更改当前表内容):
UPDATE tdb_goods INNER JOIN tdb_goods_cates ON goods_cate=cate_name SET goods_cate = cate_id;

CREAT...SELECT
创建数据表同时将查询结果写入到数据表

CREATE TABLE tdb_goods_brands
(
brand_id SMALLINT UNSIGNED RPIMARY KEY AUTO_INCREMENT,
brand_name VARCHAR(40) NOT NULL
)
SELECT brand_name FROM tdb_goods GROUP BY brand_name;


UPDATE tdb_goods AS g INNER JOIN tdb_goods_brands AS b ON g.brand_name = b.brand_name SET g.brand_name = b.grand_id;
被修改的表中存储的数据type没有变动.(brand_name依旧是VARCHAR(40))

修改主表中存储的数据type:
ALTER TABLE tdb_goods
CHANGE goods_cate cate_id SMALLINT NUSIGNED NOT NULL,
CHANGE brand_name brand_id  SMALLINT UNSIGNED NOT NULL;


连接:
MySQL在SELECT语句,多表更新,多表删除语句中支持JOIN操作.

 

 

添加唯一约束:
ALTER TABLE users4 ADD UNIQUE(password);
删除唯一约束:
ALTER TABLE users4 DROP INDEX password;

UPDATE users4 SET password=NULL WHERE id=3;

查看外键:
SHOW CREATE TABLE table_name;

列出每个部门最高薪水的结果:
SELECT dept as '部门名', MAX(salary) AS '该部门最高薪水' FROM staff GROUP BY dept;

查询每个部门总的薪水值:
SELECT dept as '部门名', SUM(salary) AS '该部门总薪水值' FROM staff GROUP BY dept;

查询每个部门2014年后最高薪水值:
SELECT dept as '部门名', MAX(salary) AS '2014年之后入职最高薪水者' FROM staff GROUP BY dept;

寻找雇员数超过2个的部门的最高和最低薪水:
SELECT dept, MAX(salary) AS MAXIMUM, MIN(salary) AS MINIMUM FROM staff GROUP BY dept HAVING COUNT(*)>2 ORDER BY dept;


(1)count(*)---包括所有列,返回表中的记录数,相当于统计表的行数,在统计结果的时候,不会忽略列值为NULL的记录。


(2)count(1)---忽略所有列,1表示一个固定值,也可以用count(2)、count(3)代替,在统计结果的时候,不会忽略列值为NULL的记录。


(3)count(列名)---只包括列名指定列,返回指定列的记录数,在统计结果的时候,会忽略列值为NULL的记录(不包括空字符串和0),即列值为NULL的记录不统计在内。

查看mysql数据库中的用户:
select host, user from mysql.user;

创建mysql数据库的用户:
create user 'xiaobei'@'localhost' identified by '123456';

查看你的mysql当前默认的存储引擎:
SHOW VARIABLES LIKE '%storage_engine%';
SHOW CREATE TABLE staff;

查看mysql的版本:
select version();
 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值