MySQL语法学习笔记(持续更)

MySQL语法学习笔记

学习之道,非尽心竭力者不能进也!我是唧唧又唧唧,欢迎查看我的笔记,有问题欢迎交流探讨。


SQL是一种结构查询语言,用于查询关系数据库的标准语言,包括若干关键字和一致的语法,便于数据库元件(表、索引、字段等)的建立和操纵。

目录

  • MySQL语法学习笔记
  • 1.MySQL建库
    • 1.1建库语句
    • 1.2删除库
  • 2.建表
    • 2.1建表模板
    • 2.2 主键(PRIMARY KEY)
    • 2.3AUTO_INCREMENT
    • 2.4 默认值
    • 2.5 存储引擎(ENGINE=InnoDB)
    • 2.6 ALTER TABLE 语句
    • 2.7 删除表
  • 3.SQL处理数据的基本方法
    • 3.1 数据检索(select 语句)
    • 3.2 数据排序
    • 3.3 数据过滤
      • 3.3.1 使用Where子句
      • 3.3.2 空值检查
      • 3.3.3 And、Or、In、Not操作及其计算次序
      • 3.3.4 通配符(模糊匹配)
  • 4.SQL处理数据高级方法
    • 4.1正则表达式
      • 4.1.1基本字符串匹配
      • 4.1.2 特殊字符“ .” 的使用
      • 4.1.3 使用 or 进行匹配
      • 4.1.4 匹配几个字符之一(用[]来实现)
      • 4.1.5 匹配范围(用[]来实现)
      • 4.1.6 特殊字符的匹配(. [] | -)
      • 4.1.7 匹配字符类
      • 4.1.8 匹配多个实例,重复元字符
      • 4.1.9 定位符,元字符
    • 4.2 计算字段
    • 4.3 MySQL数据处理函数
    • 4.4 数据汇聚
    • 4.5 数据分组
    • 4.6 子查询
    • 4.7 联结表
    • 4.8 高级联结表
  • 5.SQL高级数据查询
    • 5.1 组合查询
    • 5.2 全文检索
    • 5.2 插入数据
    • 5.3 更新和删除数据
    • 5.4 视图
    • 5.5 存储过程
    • 5.6 游标
    • 5.7 触发器



1.MySQL建库

1.1建库语句

create database emp   #建库 名为 emp
default character set utf-8   #设置该库的默认编码格式为 utf-8
collate utf8_general_ci;     #设置数据库校对规则。不区分大小写

示例中 utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写。utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。utf8_general_cs区分大小写,cs为case sensitive的缩写,即大小写敏感。

1.2删除库

drop database emp;

2.建表

2.1建表模板

CREATE TABLE customers
(
  cust_id      int       NOT NULL AUTO_INCREMENT,
  cust_name    char(50)  NOT NULL ,
  cust_address char(50)  NULL ,
  cust_city    char(50)  NULL ,
  cust_state   char(5)   NULL ,
  cust_zip     char(10)  NULL ,
  cust_country char(50)  NULL ,
  cust_contact char(50)  NULL ,
  cust_email   char(255) NULL ,
  PRIMARY KEY (cust_id)
) ENGINE=InnoDB;

2.2 主键(PRIMARY KEY)

主键值必须唯一:表中的每个行必须具有唯一的主键值。
如果主键使用单个列,则它的值必须唯一。
迄今为止我们看到的CREATE TABLE例子都是用单个列作为主键。

PRIMARY KEY (cust_id)

如果使用多个列,则这些列的组合值必须唯一 。
创建由多个列组成的主键,应该以逗号分隔的列表给出各列名。

PRIMARY KEY (order_num,order_item)

主键中只能使用不允许NULL值的列,允许NULL值的列不能作为唯一标识。

2.3AUTO_INCREMENT

AUTO_INCREMENT定义列为自增的属性,一般用于主键,每次执行一个INSERT操作时,数值会自动加1
使用的最简单的编号是下一个编号,所谓下一个编号是大于当前最大编号的编号。例如,如果cust_id的最大编号为10005,则插入表中的下一个顾客,可以具有等于10006的 cust_id 。

2.4 默认值

如果在插入行时没有给出值,MySQL允许指定此时使用的默认值。默认值 用CREATE TABLE语句的列定义中的DEFAULT关键字指定

2.5 存储引擎(ENGINE=InnoDB)

与其他DBMS一样,MySQL有一个具体管理和处理数据的内部引擎。
在你使用CREATE TABLE语句时,该引擎具体创建表。
而在你使用SELECT语句 或进行其他数据库处理时,该引擎在内部处理你的请求。
多数时候,此引擎 都隐藏在DBMS内,不需要过多关注它。

以下是几个需要知道的引擎:

  • InnoDB是一个可靠的事务处理引擎,它不支持全文本搜索;

  • MEMORY在功能等同于MyISAM,但由于数据存储在内存(不是磁盘)中,速度很快(特别适合于临时表);

  • MyISAM是一个性能极高的引擎,它支持全文本搜索但不支持事务处理 。

2.6 ALTER TABLE 语句

ALTER TABLE 语句用于在已有的表中添加、删除或修改列。

-- 表中添加列
ALTER TABLE customers
ADD cust_phone char(10)

-- 删除表中的列(请注意,某些数据库系统不允许这种在数据库表中删除列的方式)
ALTER TABLE customers
DROP COLUMN cust_phone

-- 改变表中列的数据类型
-- 修改数量字段的默认值为80
ALTER TABLE customers
MODIFY COLUMN quantity int(11) null default 80 after prod_id

2.7 删除表

DROP TABLE customers

3.SQL处理数据的基本方法

3.1 数据检索(select 语句)

Select 语句语法
Select 检索所有列
Select 检索单个列
Select 检索不同行
Select 的结果限定

# 描述表
DESC products;
# select 语句 检索所有列
SELECT * FROM products;
# select 语句 检索指定的多个列
SELECT prod_id,prod_name,prod_price FROM products;
# select 语句 检索指定的一个列
SELECT vend_id FROM products;
# 去重,DISTINCT 关键词用于返回唯一不同的值
SELECT distinct vend_id FROM products;
# 第1行开始,取前3行
SELECT * FROM products limit 3;
# 第4行开始,取3行
SELECT * FROM products limit 3,3;

3.2 数据排序

ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。
ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,可以使用 DESC 关键字。

# 先查看一下这次用的products表
SELECT * from products;
# 单个字段的排序 升序 降序
SELECT prod_id,prod_price from products
ORDER BY prod_price; 
# 默认(ASC)是升序,desc 是降序,默认可以不写
SELECT prod_id,prod_price from products
ORDER BY prod_price desc; 
# 默认排序a-z ,反序就是z-a 
SELECT prod_id,prod_price from products
ORDER BY prod_name desc; 
# 多字段排序
SELECT prod_name,prod_price from products
ORDER BY prod_price,prod_name;
# 找出最便宜的产品
SELECT prod_name,prod_price from products
ORDER BY prod_price LIMIT 1; 
# 找出最贵的产品
SELECT * from products
ORDER BY prod_price DESC LIMIT 1; 

3.3 数据过滤

数据库表一般包含大量的数据,很少需要检索表中所有行。
通常只会根据特定操作或报告的需要提取表数据的子集。
只检索所需数据需要指定搜索条件(search criteria)
搜索条件也称为过滤条件(filter condition)。
在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。
WHERE子句在表名 (FROM子句)之后给出。

3.3.1 使用Where子句

检查单个值
不匹配检查

# 筛选价格是2.5的产品
select * from products where prod_price = 2.5;
# 筛选价格是2.5的产品,并只显示特定的字段
select prod_name,prod_price from products 
where prod_price = 2.5;

# WHERE 条件操作符:=、>、<、>=、<=、<>/!=、between * and *(包含首尾)
select prod_name,prod_price from products 
where prod_price >= 2.5 and prod_price <10
order by prod_price;

select prod_name,prod_price from products 
where prod_price BETWEEN 2.5 and 10 
order by prod_price;

练习:
找出价格低于10元的产品
找出价格不是供应商1003制造的产品
找出供应商1001,1003 制造的产品

select prod_name,prod_price from products 
where prod_price < 10
order by prod_price;

select vend_id,prod_name,prod_price from products 
where vend_id != 1003
order by prod_price;

select vend_id,prod_name,prod_price from products 
where vend_id = 1001 or vend_id = 1003;
order by prod_price;

3.3.2 空值检查

select * from products
where prod_desc is null

3.3.3 And、Or、In、Not操作及其计算次序

  • AND & OR 运算符用于基于一个以上的条件对记录进行过滤。
  • 如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
  • 如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
# where 组合子句之 and 操作(交集)
select * from products where vend_id=1003 and prod_price <=10
ORDER BY prod_price;
# where 组合子句之 or 操作(并集)
select * from products where vend_id=1003 or vend_id =1002# where 组合子句之 AND 和 OR 的结合使用(使用圆括号来组成复杂的表达式)
SELECT * FROM products
WHERE prod_price <=10
AND (vend_id=1003 or vend_id =1002);
  • IN 操作符允许在 WHERE 子句中规定多个值
  • ‘=’ 规定一个值
# where 组合子句之 in 操作
select * from products where 
vend_id in (1001,1005,1002);
# where 组合子句之 in 与  = 的转换
select * from products where 
vend_id = 1001 or vend_id = 1005 or vend_id = 1002;
# where 组合子句之 not 操作
select * from products where 
vend_id not in (1002);

3.3.4 通配符(模糊匹配)

  • 通配符可用于替代字符串中的任何其他字符。
  • “%” 符号用于在模式的前后定义通配符(默认字母),替代 0 个或多个字符
  • “_” 替代1个字符。
  • LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式
# 找到以 jet开头的产品
select prod_id ,prod_name from products
where prod_name like 'jet%'

MySQL语法学习笔记(持续更)_第1张图片

select prod_id ,prod_name from products
where prod_name like '%anvil%'

select prod_id ,prod_name from products
where prod_name like 's%e'

select prod_id ,prod_name from products
where prod_name like '_ ton anvil'

select prod_id ,prod_name from products
where prod_name like '__ ton anvil'

4.SQL处理数据高级方法

4.1正则表达式

正则表达式 用特殊的字符集合与一个文本串进行比较,过滤检索出想要的数据

4.1.1基本字符串匹配

# 使用 like 关键字和通配符 % 
select prod_name from products
where prod_name like '%1000';
# 使用正则表达式 REGEXP
select prod_name from products
where prod_name REGEXP '1000';
# 可以检索出prod_name 中所有含有‘1000’的行

在这里插入图片描述

4.1.2 特殊字符“ .” 的使用

“ .” 在正则表达式中表示匹配任意一个字符

# 使用 like 关键字和通配符 _
select prod_name from products
where prod_name like 'JetPack _000';
# 使用正则表达式 REGEXP 和特殊字符“.”
select prod_name from products
where prod_name REGEXP '.000';

4.1.3 使用 or 进行匹配

此 or 不是真的 or ,而是使用竖线 “|” 表示搜索两个匹配文本串之一

select prod_name from products
where prod_name like 'JetPack _000';

# 检索prod_name 中所有含有‘1000’或者‘2000’的行
select prod_name from products
where prod_name REGEXP '1000|2000';

MySQL语法学习笔记(持续更)_第2张图片
正则表达式中可使用多个 or 条件

select prod_name from products
where prod_name REGEXP '1000|2000|anvil';

MySQL语法学习笔记(持续更)_第3张图片

4.1.4 匹配几个字符之一(用[]来实现)

select prod_name from products
where prod_name REGEXP '[12] ton';

这里使用正则表达式 [12] ton 。 [12] 定义了一组字符1,2;可以匹配 1 ton 和 2 ton.
其实,[] 是另一种形式的 or 语句

4.1.5 匹配范围(用[]来实现)

[]用来定义要匹配的一个或多个字符
[0-9] 匹配0到9的任意数字字符
[1-3] 匹配1到3的任意数字字符
[6-9] 匹配6到9的任意数字字符
[a-z] 匹配a到z 的任意字母字符

select prod_name from products
where prod_name REGEXP '[1-5] ton';
# 匹配1到5,所以也返回了.5ton

MySQL语法学习笔记(持续更)_第4张图片

4.1.6 特殊字符的匹配(. [] | -)

匹配特殊字符(. [] | -)时,需要使用 转义符(两个反斜杠\\)
\\- 表示查找 -,\\.表示查找 .

select prod_name from products
where prod_name REGEXP '\\.';

MySQL语法学习笔记(持续更)_第5张图片

4.1.7 匹配字符类

[:digit:] 任意数字 (同[0-9])
[:alnum:] 任意字母和数字 (同[a-zA-Z0-9])
[:alpha:] 任意字母 (同[a-zA-Z])
[:lower:] 任意小写字母 (同[a-z])
[:upper:] 任意大写字母 (同[A-Z])

4.1.8 匹配多个实例,重复元字符

* 0个或多个匹配
+ 1个或多个匹配 (同{1,})
? 0个或1个匹配(同{0,1})
{n} 指定数目的匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围(m不超过255)
select prod_name from products
here prod_name REGEXP '[[:digit:]]{4}'

MySQL语法学习笔记(持续更)_第6张图片

select prod_name from products
where prod_name REGEXP '\\([0-9] sticks?\\)';

MySQL语法学习笔记(持续更)_第7张图片

4.1.9 定位符,元字符

元字符 说明
^ 文本的开始
$ 文本的结尾
[[:<:]] 词的开始
[[:>:]] 词的结尾
select prod_name from products
where prod_name REGEXP '^[\\.]'

在这里插入图片描述

4.2 计算字段

4.3 MySQL数据处理函数

4.4 数据汇聚

4.5 数据分组

4.6 子查询

4.7 联结表

4.8 高级联结表

5.SQL高级数据查询

5.1 组合查询

5.2 全文检索

5.2 插入数据

5.3 更新和删除数据

5.4 视图

5.5 存储过程

5.6 游标

5.7 触发器

你可能感兴趣的:(笔记,mysql)