mysql中字段存储1_2_3这样数据的读取_MySQL基础知识总结

1、 数据库和SQL

1.1、基本概念:

数据库管理系统 DBMS

关系数据库 RDB

关系数据库管理系统 RDBMS

结构化查询语言 SQL

1.2、创建数据库

CREATE DATABASE

1.3、创建表

CREATE TABLE

(,

PRIMARY KEY (列名));

1.4、删除表

DROP TABLE

1.5、表定义的更新

添加列ALTER TABLE ADD COLUMN

删除列ALTER TABLE DROP COLUMN

1.6、向表中插入数据

START TRANSACTION;

INSERT INTO

VALUES(VALUE1,VALUE2,VALUE3);

INSERT INTO

VALUES(VALUE1,VALUE2,VALUE3);

COMMIT;

1.7、变更表名

RENAME TABLE

to

2、查询基础

2.1、在select 语句中使用DISTINCT 可以删除重复行

DISTINCT 关键字智能用在第一个列名之前

2.2、根据where语句来选择记录

Where 子句中可以指定“某一列的值和这个字符串相等”或者“某一列的值大于这个数字”等条件。

Select

FROM

WHERE

通过WHERE子句查询出符合条件的记录,然后再选出SELECT语句指定的列

WHERE子句紧跟在FROM子句之后

2.3、算术运算符和比较运算符

2.3.1算术运算符 + - * /

包含null值的计算结果都是null

2.3.2比较运算符

=

<>

>=

>

<=

<

不能对NULL使用比较运算符,要用IS NULL 运算符

2.4、逻辑运算符

NOT

AND

OR

真值

TRUE

FALSE

UNKNOWN

3、 聚合与排序

3.1、

对表进行聚合查询

聚合函数

COUNT 计算个数

SUM 数值求和

AVG 数值平均值

MAX 数值最大值

MIN 数值最小值

聚合函数(除了COUNT外)会把NULL值排除在外

COUNT(*)会得到包含NULL的数据行数

COUNT()会得到不含NULL的数据行数

想要计算种类时,可以在COUNT函数中使用DISTINCT

COUNT(DISTINCT )

3.2、

对表进行分组

GROUP BY

GROUP BY子句中指定的列称为聚合键或者分组列,可以通过逗号指定多列。

书写顺序

SELECT →FROM →WHERE →GROUP BY

常见错误1

把聚合键之外的列名书写在select 子句之中

常见错误2

在where子句中使用聚合函数

只有 select 子句、HAVING子句以及ORDER BY 子句能使用聚合函数

3.3、为聚合结果指定条件

HAVING

HAVING子句写在GROUP BY子句之后

SELECT →FROM →WHERE →GROUP BY →HAVING

3.4、

对查询结果进行排序

ORDER BY,

ORDER BY子句写在SELECT语句的末尾

ORDER BY 子句中的列名称为排序键

书写顺序

SELECT →FROM →WHERE →GROUP

BY →HAVING →ORDER BY

指定升序或降序

DESC 降序 ASC 升序

默认升序

排序键中包含null时,会在开头或末尾进行汇总

执行顺序

FROM →WHERE →GROUP BY →HAVING

→SELECT→ORDER BY

SELECT子句执行顺序在GROUP BY 之后ORDER BY 之前因此 GROUP BY子句中不能识别SELECT子句中定义的别名,而ORDER BY 子句可以识别别名

4、数据更新

4.1、数据的插入(INSERT)

INSERT INTO (列1,列2,列3)VALUES(值1,值2,值3);

插入默认值

在创建表的时候在列的约束部分设置默认值

DEFAULT<0>

CREATE TABLE Product

(sale_price INTEGER DEFAULT 0,

Primary KEY());

INSERT INTO Product values (‘0001’,’擦菜板’,‘厨房用具’,default,790,‘2009-04-28’);

从其他表中复制数据

INSERT…SELECT 语句

INSERT INTO Productcopy SELECTproduct_id,

product_name, regist_date

FROM product;

4.2、数据删除

DROP TABLE 删除表

DELETE FROM TABLE

WHERE ;

删除表中的数据/行

4.3、数据的更新

UPDATE

SET =

;

WHERE ;

4.4、

事务

事务就是需要在同一个处理单元中执行的一系列更新处理的集合

事务的语法:

START TRANSACTION;

DML语句1

DML语句2

COMMIT(ROLLBACK);

5、 复杂查询

5.1、视图

视图其实就是一张表但是这张表并不会保存到储存设备中,实际上保存的是SELECT语句,我们从视图中读取数据时,视图会在内部执行该SELECT语句并创建出一张临时表。

表中存储的是数据,而视图中保存的是从表中取出数据所使用的SELECT语句。

应该将经常使用的SELECT语句做成视图。

创建视图

CREAT VIEW 视图名称(列1,列2)

AS

使用视图

SELECT 列1,列2

FROM 视图名称;

删除视图

DROP VIEW 视图名称;

5.2、子查询

子查询实际就是一张一次性的视图。

子查询是将用来定义视图的SELECT语句直接用于FROM子句当中。

为子查询设定名称时需要使用AS 关键字,也可以省略

5.2.1 标量子查询

标量子查询就是返回单一值的子查询

标量子查询几乎所有地方都可以使用。

标量子查询的返回值可以用在=或者>

5.2.2 关联子查询

在细分的组内进行比较时,需要使用关联子查询。

关联子查询是在子查询中添加where子句的条件,将数据限制在同一个组内(然后进行比较)。

关联子查询和GROUP BY子句一样可以对集合进行切分。

结合条件一定要写在子查询中。

SELECT product_type, product_name,

sale_price

FROM Product AS P1

WHERE sale_price >(SELECT

AVG(sale_price)

FROM Product AS P2

WHERE P1.product_type=P2.product_type

GROUP BY product_type);

关联子查询的关联名称(P2)仅在子查询中有效。

子查询结束时只会留下执行结果,P2表已经不存在了。在子查询以外使用P2会返回“不存在使用该名称的表”这样的错误。

6、 函数、谓词、CASE表达式

6.1、函数

6.1.1 算术函数

+-*/

ABS(数值)

MOD(被除数,除数)

MOD(7,3)返回1

ROUND(对象数值,保留小数位数)

6.1.2 字符串函数

LENGTH(字符串)

LOWER(字符串)

UPPER(字符串)

REPLACE(对象字符串,替换前的字符串,替换后的字符串)

SUBSTRING(对象字符串 FROM 起始位置 FOR 截取长度)

6.1.3 日期函数

CURRENT_DATE 返回当前日期

CURRENT_TIME 返回当前时间

CURRENT_TIMESTAMP 返回当前时间和日期

EXTRACT(日期元素 FROM 日期)

EXTRACT(YEAR FROM CURRENT_TIMESTAMP)AS year;

DATE_FORMAT (DATE, FORMAT)

DATE_FORMAT(NOW(), ‘%m-%d-%Y’)

DATE_SUB()函数从日期减去指定的时间间隔

CURDATE()返回当前日期

DAY() 返回日期值INTEGER

MONTH() 返回月份值INTEGER

YEAR()返回年值INTEGER

昨天

Date_format(pay_time,’%Y-%m-%d’)>=date_sub(curdate(),interval

1day)

30天前

Date_format(pay_time,’%Y-%m-%d’)>=date_sub(curdate(),interval

30 day)

上一个月

Month(DATE _format(pay_time,’%Y-%m-%d’))=month(now())-1

6.1.4 转换函数

CAST(转换前的值 AS 想要转换的数据类型)

CAST(‘0001’ AS

INTEGER)

COALESCE(数据1,数据2,数据3)返回左侧开始第1个不是null的值。

COALESCE(null,1)

返回1

IFNULL(null,1)返回1

IFNULL(A,B)如果A是null时返回B,如果A不是null返回A

6.2 谓词

LIKE ‘%ddd%’ 模糊查询

BETWEEN AND 范围查询

BETWEEN 100 AND 1000

IS NULL 判断是否为NULL

IN(值1,值2)

IN (子查询)

EXIST(关联子查询)

作为EXIST参数的子查询中经常会使用SELECT *

6.3 CASE表达式

CASE WHEN THEN

WHEN THEN

WHEN THEN

---------

ELSE

END

CASE 表达式可以用在任意位置,常用在SELECT语句中。

7、 集合运算

7.1、表的加减法

集合运算包括:表的加法UNION(并集),选取公共部分INTERSECT(交集),表的减法EXCEPT(差集)等。

集合运算是行方向上的运算,可以去除重复行,如果希望保留重复行就需要使用ALL关键字。

注意事项:

列数必须相同

列的类型必须一致

可以使用任何SELECT语但OEDER BY子句只能在最后使用一次

7.2、联结(以列为单位对表进行联结)

联结是列方向上的运算。

INNER JOIN(等值联结)只返回两个表中联结字段相等的行

LEFT JOIN(左联结)返回包括左表中的所有记录和右表中联结字段相等的字段。

RIGHT JOIN(右联结)返回包括右表中的所有记录和左表中联结字段相等的字段。

使用联结时SELECT子句中的列需要按照“.”的格式来书写全部列。

8、 练习

分组求最值

例1:求每类商品中最贵的商品

select *

FROM product P1

WHERE

sale_price =(SELECT MAX(sale_price)FROM product P2

where

P1.product_type=P2.product_type)

ORDER BY product_type, sale_price DESC;

例2:求每类商品中价格最贵的2种商品

select *

FROM product

P1

WHERE

(SELECT count(*) FROM product P2

where

P1.product_type=P2.product_type AND P2.sale_price>P1.sale_price)<2

ORDER BY product_type, sale_price DESC;

参考书

SQL基础教程(第2版)MICK

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值