MySQL学习笔记<一>

Mysql 入门学习<一>

SQL

通用语法

  • sql语句以分号结尾,可以单行或者多行书写。
  • sql不区分大小写,关键字建议使用大写。
  • 注释:
    • 单行注释: – / #
    • 多行注释 /* */

sql分类

  • DDL
    • 数据定义语言,用来定义数据库对象(数据库、表、字段)
  • DML
    • 数据库操作语言,用来对数据库表中的数据进行增删改
  • DQL
    • 数据查询语言,用来查询数据库中表的记录
  • DCL
    • 数据控制语言,用来创建数据库用户、控制数据库的访问权限

数据类型


数值类型

MySQL 支持所有标准 SQL 数值数据类型。

这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL 和 NUMERIC),以及近似数值数据类型(FLOAT、REAL 和 DOUBLE PRECISION)。

关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。

BIT数据类型保存位字段值,并且支持 MyISAM、MEMORY、InnoDB 和 BDB表。

作为 SQL 标准的扩展,MySQL 也支持整数类型 TINYINT、MEDIUMINT 和 BIGINT。下面的表显示了需要的每个整数类型的存储和范围。

类型大小范围(有符号)范围(无符号)用途
TINYINT1 Bytes(-128,127)(0,255)小整数值
SMALLINT2 Bytes(-32 768,32 767)(0,65 535)大整数值
MEDIUMINT3 Bytes(-8 388 608,8 388 607)(0,16 777 215)大整数值
INT或INTEGER4 Bytes(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
BIGINT8 Bytes(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值
FLOAT4 Bytes(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度 浮点数值
DOUBLE8 Bytes(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度 浮点数值
DECIMAL对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值

日期和时间类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

TIMESTAMP类型有专有的自动更新特性,将在后面描述。

类型大小 ( bytes)范围格式用途
DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3‘-838:59:59’/‘838:59:59’HH:MM:SS时间值或持续时间
YEAR11901/2155YYYY年份值
DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
TIMESTAMP41970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07YYYYMMDD HHMMSS混合日期和时间值,时间戳

字符串类型*

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。

类型大小用途
CHAR0-255 bytes定长字符串
VARCHAR0-65535 bytes变长字符串
TINYBLOB0-255 bytes不超过 255 个字符的二进制字符串
TINYTEXT0-255 bytes短文本字符串
BLOB0-65 535 bytes二进制形式的长文本数据
TEXT0-65 535 bytes长文本数据
MEDIUMBLOB0-16 777 215 bytes二进制形式的中等长度文本数据
MEDIUMTEXT0-16 777 215 bytes中等长度文本数据
LONGBLOB0-4 294 967 295 bytes二进制形式的极大文本数据
LONGTEXT0-4 294 967 295 bytes极大文本数据

DDL-数据库操作

DataBase 操作

查询

查询所有数据库:SHOW DATABASES;

查询当前数据库:SELECT DATABASE();

创建

CREATE DATABASE [IF NOT EXISTS]数据库名[DEFAULT CHARSET 字符集][COLLATE 排序规则];

删除

DROP DATABASE[IF EXISTS] 数据库名;

使用

USER 数据库名


Table 操作*

查询数据库所有表

SHOW TABLES;

查询表结构

DESC 表名;

查询指定表的建表语句

SHOW CREATE TABLE 表名;

创建表

CREATE TABLE IF NOT EXISTS `runoob_tbl`(
   `runoob_id` INT UNSIGNED AUTO_INCREMENT,
   `runoob_title` VARCHAR(100) NOT NULL,
   `runoob_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

删除表

DROP TABLE table_name ;

删除指定表,并重新创建该表

TRUNCATE TABLE 表名;

添加字段

ALTER TABLE '表名' ADD 字段名 类型[COMMENT 注释][约束]

修改字段数据类型

ALERT TABLE '表名'MODIFY 字段名 新数据类型(长度);

修改字段名和字段类型

ALERT TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度)[COMMENT 注释][约束];

删除字段

ALERT TABLE 表名 DROP 字段名;

修改表名

ALERT TABLE 表名 RENAME TO 新表名;

小结

DDL 主要是对数据库中的数据库、表、字段进行增删改查操作。如:创建删除数据库、表、字段,还可以对字段和表进行重命名。

DML-数据操作

介绍

全称是数据库操作语言,用来对数据库中表的数据进行记录进行增删查改操作。

  1. 添加数据(INSERT)
  2. 修改数据(UPDATE)
  3. 删除数据(DELETE)
添加数据

给指定字段添加数据

INSERT INTO TABLE_NAME(FIELD1,FIELD2,....) VALUES(VALUE1,VALUE2,....);

给全部字段添加数据

INSERT INTO TABLE_NAME VALUES(VALUE1,VALUE2,....);

批量添加数据

INSERT INTO TABLE_NAME(FIELD1,FIELD2,....) VALUES(VALUE1,VALUE2,...)(VALUE1,VAULE2,...);

ISNERT IINTO TABLE_NAME VALUES(VALUE1,VALUE2,....)


修改数据

UPDATE TABLE_NAME SET FIELD1=VALUE1,FIELD2=VALUE2,.... [WHERE 条件]

删除数据

DELETE FROM TABLE_NAME [WHERE 条件]

小结

添加数据

  1. 如果未指定字段名,则对所有字段进行插入数据。
  2. 指定字段名,则对指定字段进行插入数据。
  3. 可以进行批量插入数据。
  4. INSERT INTO TABLE_NAME(FIELD1,FIELD2,…) VALUES(VALUE1,VALUE2,…);

删除数据

  1. 删除指定条件的数据。
  2. 删除所有表数据。
  3. DELET FROM TABLE_NAME [WHERE 条件]。

修改数据

  1. 指定条件,则对满足条件的数据记录进行对指定的字段进行修改数据。
  2. 未指定条件,则对表所有记录进行对指定的字段进行修改数据。

DQL-数据查询

语法

SELECT 
	FIELD1,FIELD2,....
FROM 
	TABLE_NAME
GROUP BY
	分组字段列表
HAVING
	分组后条件列表
ORDER BY
	排序字段列表
LIMIT
	分页参数

基本查询

查询多个字段

SELECT FIELD1,FIELD2 FROM TABLE_NAME;

SELECT * FROM TABLE_NAME;

设置别名

SELECT FIELD1[AS 别名],FIELD2[AS 别名]... FROM TABLE_NAME;

去除重复记录

SELECT DISTINCT FIELD1,FIELD2,..... FROM TABLE_NAME


条件查询

语法

SELECT FIELD_LIST FROM TABLE_NAME WHERE 条件列表(FIELD_LIST=>(field1,field2,…))

条件

操作符描述
=等号,检测两个值是否相等,如果相等返回true
<>, !=不等于,检测两个值是否相等,如果不相等返回true
>大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true
<小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true
>=大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true
<=小于等于号,检测左边的值是否小于或等于右边的值, 如果左边的值小于或等于右边的值返回true
BETWEEN…AND…在某个范围之内(含最小,最大值)
IN(…)在in之后的列表中的值,多选一
LIKE 占位符模糊匹配(_匹配单个字符、%匹配任意个字符)
IS NULL是NULL
AND 或 &&并且
OR 或 ||或者
NOT 或 !

聚合函数

介绍

将一列数据作为一个整体,进行纵向计算。

常见聚合函数

函数功能
count统计数量
max最大值
min最小值
avg平均值
sum求和

语法

SELECT 聚合函数(FIELD_LSIT) FROM TABLE_NAME;


分组查询

语法

SELECT FIELD_LIST FROM TABLE_NAME [WHERE 条件] GROUP BY 分组字段名[HAVING 分组后过滤条件]

WHERE 与 HAVING区别

  1. 执行时机不同:WHERE是分组前进行过滤,不满足条件不参与分组,而HAVING是分组之后对结果进行过滤。
  2. 判断条件不同:WHERE不能对聚合函数进行判断,而HAVING可以。

排序查询

语法

SELECT FIELD_LIST FROM TABLE_NAME ORDER BY FIELD1 排序方式,FIELD2 排序方式;

排序方式

  1. ASC:升序(默认值)
  2. DESC:降序
  3. 对于多字段排序,如果前面的字段值相同时,再根据后面的字段值进行大小排序

分页查询

语法

SELECT FIELD_LIST FROM TABLE_NAME LIMIT 起始索引,查询记录;

注意

  1. 起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数
  2. 分页查询是不同的数据库有不同的实现
  3. 如果查询到是第一页数据,起始索引可以省略,直接简写LIMIT NUMBER
力扣学习

595. 大的国家

在这里插入图片描述

SELECT 
    `name`,`population`,`area`
FROM
     World
WHERE
    `area` >=3000000 or `population`>=25000000;

1757. 可回收且低脂的产品

在这里插入图片描述

SELECT 
    product_id
FROM
    Products
WHERE 
    recyclable = 'Y' and  low_fats = 'Y'

584. 寻找用户推荐人

在这里插入图片描述

SELECT 
    `name`
FROM 
    customer
WHERE
    referee_id !=2 or referee_id IS NULL;

183. 从不订购的客户

在这里插入图片描述

SELECT 
    `name` as Customers
FROM 
    Customers
WHERE 
    `Id` NOT IN (SELECT CustomerId FROM Orders)

175. 组合两个表

在这里插入图片描述

SELECT 
   a.firstName, a.lastName,b.city,b.state
FROM 
    Person  as a
LEFT JOIN
    Address as b
ON 
    a.personId = b.personId

176. 第二高的薪水

在这里插入图片描述

SELECT
    (SELECT DISTINCT
            Salary
        FROM
            Employee
        ORDER BY Salary DESC
        LIMIT 1 OFFSET 1) AS SecondHighestSalary
;
# 先进行降序排序,再使用LIMIT 查询第二个记录


SELECT
    IFNULL(
      (SELECT DISTINCT Salary
       FROM Employee
       ORDER BY Salary DESC
        LIMIT 1 OFFSET 1),
    NULL) AS SecondHighestSalary

# 使用IFNULL函数保证没有第二大记录的时候返回一个null

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值