MySQL精简复习

2023-11-08


1、常用关键字增删查改:INSERT、DELECT、SELECT、UPDATE 以及表创建 CREATE
在使用DELETE时,不要省略WHERE子句,否则就会错误地删除表中所有行
INSERT INTO 表名(各个字段名称用逗号隔开)VALUE (各个字段名称插入值用逗号隔开);
INSERT INTO 表名(各个字段名称用逗号隔开)SELECT 各个字段名称 FROM 另一个表;
DELETE FROM 表名 WHERE 过滤条件;
UPDATE 表名 SET 修改列名=‘更新值’ WHERE 过滤条件;
更新表:对已存在表插入新的字段或删除已有字段

//插入完整行
INSERT INTO emp (id,name,age,dep_id) VALUES('9','周杰伦','44','4'),('10','林俊杰','34','3');
//插入检索数据:从另一个表中合并员工列表
INSERT INTO emp (id,name,age,dep_id) SELECT id,name,age,dep_id FROM empnew;
//删除特定行
DELETE FROM emp WHERE id='9';
//修改数据
UPDATE emp SET age='43',dep_id='1' WHERE name='周杰伦';
//创建表
CREATE TABLE students IF NOT EXISTS(
id int NOT NULL AUTO_INCREMENT,
stu_name char(50) NOT NULL,
stu_address char(50) NULL,
stu_email char(50) NULL,
PRIMARY KEY (id)
)ENGINE=InnoDB;
//删除表
DROP TABLE student;
//重命名表
RENAME TABLE stu TO student;

//学生表插入新字段 ALTER TABLE ... ADD ...
ALTER TABLE students ADD parents_name CHAR(50);
//学生表删除已有字段 ALTER TABLE ... DROP ...
ALTER TABLE students DROP parents_name;

PRIMARY KEY 用于指定主键
AUTO_INCREMENT 告诉MySQL每增加一行时自动增量。每个表中只允许一个AUTO_INCREMENT 列,且它必须被索引(如:使它成为主键)
NOT NULL的作用表示在插入值时,需要对列进行赋值,阻止插入没有值的列。


2、DISTINCT关键字返回不同值

SELECT DISTINCT dep_id FROM emp;


3、LIMIT关键字限制输出

//输出前三条数据
SELECT name FROM emp LIMIT 3;
//输出从第三行开始的两条数据
SELECT name FROM emp LIMIT 3,2;


4、完全限定表名:表名.字段 或 库名.表名----》用于规定使用的字段和表来源

emp.name


5、ORDER BY关键字:用于排序检索数据;在排序字段后面添加DESC或ASC来规定降序或升序

// 根据姓名排序,在名字为中文时使用CONVERT(name USING gbk)将字段改为GBK编码用于汉字排序,降序
SELECT name FROM emp ORDER BY CONVERT(name USING gbk) DESC;
//根据多个条件排序,升序
SELECT name,age,dep_id FROM emp ORDER BY dep_id,age ASC;


6、WHERE关键字:进行条件筛选,可以与AND(同时满足)操作符合OR(满足其中之一)操作符结合使用达到多条件筛选

SELECT name,age FROM emp WHERE age<30;
SELECT name,age,dep_id FROM emp WHERE dep_id=1 AND age<=30;
SELECT name,age,dep_id FROM emp WHERE dep_id=1 OR age<=30;


7、IN操作符:IN操作符用来指定条件范围,对范围中的每个条件都可以进行匹配。IN的功能与OR相当,但执行一般比OR更快,IN的最大优点是可以包含其他SELECT语句,能够更动态的建立WHERE子句。NOT操作符用于否定它后面所跟的条件

//查询dep_id为1或2的数据,并将结果根据dep_id和age排序
SELECT name,age,dep_id FROM emp WHERE dep_id IN (1,2) ORDER BY dep_id,age;
SELECT name,age,dep_id FROM emp WHERE dep_id NOT IN (1,2) ORDER BY dep_id,age;


8、LIKE操作符:使用通配符与LIKE关键字对数据进行过滤。通配符包含两种:1、百分号 %:%表示任何字符出现任何次数,百分号也可以匹配0个字符;2、下划线 _ :_ 表示单个的任何字符。通配符有个缺点是花费时间比其它搜索方式更长

//查找所有张姓人员
SELECT name,age,dep_id FROM emp WHERE name LIKE '张%';


9、REGEXP关键字:该关键字后面跟正则表达式
1)正则表达式中“.”表示任意一个字符
2)正则表达式中OR可以用“|”表示
3)正则表达式中[ ]是另一种形式的OR,如[23]4表示23或24等价于23|24
4)正则表达式表示匹配范围,如2[3-9]表示匹配数据为23-29的所有数
5)特殊字符匹配,如“.”的匹配表达应该为’\.’
6)字符类和重复元字符的正则匹配
7)包含定位符的正则匹配

//查找年龄为x4的相关信息
SELECT name,age,dep_id FROM emp WHERE age REGEXP '.4';
//查找符合其中之一条件(年龄为23或24)的字段信息
SELECT name,age,dep_id FROM emp WHERE age REGEXP '22|24';
SELECT name,age,dep_id FROM emp WHERE age REGEXP '[23]4';
//查找年龄为23-29的员工信息
SELECT name,age,dep_id FROM emp WHERE age REGEXP '2[3-9]' ORDER BY age;
SELECT name,age,dep_id FROM emp WHERE age REGEXP '\\.' ORDER BY age;
//正则表达式:\\([0-9] sticks?\\)---》匹配例子(3 stick)、(3 sticks)、(5 stick)等
SELECT name,age,dep_id FROM emp WHERE dep_id REGEXP '\\([0-9] sticks?\\)' ORDER BY dep_id;
//以0-9或'.'开始的所有数据信息
SELECT name,age,dep_id FROM emp WHERE dep_id REGEXP '^[0-9//.]' ORDER BY dep_id;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


10、字段拼接,Concat()函数,参数使用列名或字符串,各字符串之间使用逗号隔开
AS关键字用于对字段起别名。

//拼接名字价格--->如:苹果(5元)
SELECT Concat(name,'(',price,'元',')') FROM t_fruit
ORDER BY CONVERT(fname USING gbk),price;
//起别名
SELECT fname,price,fcount,price*fcount AS totalprice FROM t_fruit 
ORDER BY CONVERT(fname USING gbk),price;


11、文本处理函数
RTrim()函数:去掉串右边的空格
LTrim()函数:去掉串左边的空格
Upper()函数:将文本转化为大写
Lower()函数:将串转化为小写
Length()函数:返回串的长度
Locate()函数:找出串的一个子串
Soundex()函数:返回发音类似的值
SubString()函数:返回子串的字符

SELECT username,Upper(username) as name_upcase from tb_user 
ORDER BY id;


12、日期处理函数:MySQL使用的日期格式,不管是插入或者更新表值还是使用WHERE进行过滤,日期的格式必须为:yyyy-mm-dd hh:mm:ss

SELECT id,num FROM orders WHERE DATA(order_data)='2005-09-01';


在这里插入图片描述

13、数值处理函数:

在这里插入图片描述


14、聚集函数
1)求均值AVG()函数,输入参数为字段名称
2)统计函数COUNT():统计表中行的数目或符合特定条件行的数目,对特定列进行统计时会忽略null值
3)MAX()函数:寻找最大值,列名作为参数给出
4)MIN()函数:寻找最小值,列名作为参数给出
5)SUM()函数:返回指定列的值的和,列名作为参数给出
6)这些聚集函数可以结合DISTINCT关键字一起使用,实现对不同值的操作。

//计算产品的平均价格
SELECT AVG(price) AS avg_price FROM products;
//统计有邮箱用户的数量
SELECT COUNT(email) AS num_cust FROM customers;
//产品中最贵的价格
SELECT MAX(price) AS max_price FROM products;
//产品中最便宜的价格
SELECT MIN(price) AS min_price FROM products;
//对价格不同的产品计算平均值
SELECT AVG(DISTINCT price) AS avg_price FROM products;


15、GROUP BY子句、HAVING关键字
GROUP BY 子句根据给定数据列对每个成员查询结果进行分组统计,GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之间
HAVING实现过滤分组(WHERE只能按条件进行过滤)

//根据部门id对查询结果进行统计
SELECT dep_id,COUNT(*) AS numbers FROM emp GROUP BY dep_id;
//根据部门id对查询结果进行统计,同时筛选出部门人数大于2的信息
SELECT dep_id,COUNT(*) AS numbers FROM emp GROUP BY dep_id HAVING COUNT(*)>2;


16、子查询:嵌套在其他查询中的查询成为子查询,子查询总是由内向外进行处理。

SELECT name FROM emp WHERE dep_id IN(SELECT dep_id FROM emp WHERE age>30);

//子句用于统计每个客户的订单数,最后输出查询cust_name cust_state,orders的结果并根据用户名排序
SELECT cust_name cust_state 
(SELECT COUNT(*) FROM orders WHERE orders.cust_id = customers.cust_id) AS orders
FROM customers ORDER BY cust_name;


17、表联结:SQL 最强大的功能之一就是能在数据检索查询的执行中联结表。关系表的设计就是要保证把信息分成多个表,一类数据一个表。
笛卡尔积:若对两个表进行联结而不设立联结条件的表关系返回结果为笛卡尔积,即检索出的行数是第一个表中的行数乘第二个表的行数。因此联结条件很重要

//对emp,dept表进行表联结查询,并根据部门和年龄排序
SELECT name,age,dep_name,addr FROM emp,dept 
WHERE emp.dep_id=dept.id ORDER BY dep_id,age;
//输出结果条数为笛卡尔积
SELECT name,age,dep_name,addr FROM emp,dept ORDER BY dep_id,age;


18、内部联结两种格式:
1)select 字段列表 from 表1,表2… where 联结条件;
2)select 字段列表 from 表1 [inner] join 表2 on 条件;;

//使用where进行内部联结查询
SELECT name,age,dep_name,addr FROM emp,dept 
WHERE emp.dep_id=dept.id ORDER BY dep_id,age;
//使用INNER JOIN ... ON进行内部联结查询
SELECT name,age,dep_name,addr FROM
emp INNER JOIN dept ON emp.dep_id=dept.id;
//多表联结查询
SELECT emp.name,age,dep_name,addr,money 
FROM emp,dept,account 
WHERE emp.dep_id=dept.id AND emp.name=account.name;


19、自联结:假设某物品(ID为DTNTR)存在问题,因此想知道生产该物品的供应厂商生产的其他物品是否有问题。操作步骤:先通过物品ID找到供应商;在通过供应商找到其生产的所有物品
1)select 字段列表 from 表1,表2… where 联结条件;
2)select 字段列表 from 表1 [inner] join 表2 on 条件;;

//使用子查询方式
SELECT prod_id,prod_name FROM products 
WHERE vend_id=(SELECT vend_id FROM products WHERE prod_id='DTNTR')
//使用自联结
SELECT p1.prod_id,p1.prod_name FROM products AS p1,products AS p2
WHERE p1.vend_id = p2.vend_id 
AND p2.vend_id='DTNTR';


20、外部联结:左外部联结和右外部联结
1)select 字段列表 from 表1 left [outer] join 表2 on 条件;
2)select 字段列表 from 表1 right [outer] join 表2 on 条件;
外部联结与内部联结的区别:
内连接查询操作列出与连接条件匹配的数据行;外连接,返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接)、右表(右外连接)或两个边接表(全外连接)中的所有数据行。(RIGHT指出的是OUTER JOIN右边的表,选择右边表的所有行)(LEFT指出的是OUTER JOIN左边的表,选择左边表的所有行)

//左外部联结
SELECT name,age,dep_name,addr FROM emp LEFT OUTER JOIN dept ON emp.dep_id=dept.id;
//右外部联结
SELECT name,age,dep_name,addr FROM emp RIGHT OUTER JOIN dept ON emp.dep_id=dept.id;


21、UNION关键字:用于组合多条SELECT执行语句
SELECT语句输出用ORDER BY进行排序,在使用UNION组合查询时,只能使用一条ORDER BY子句,且必须在最后一条SELECT语句之后。

//输出年小于27 或部门id为1和2的员工合集
SELECT name,age FROM emp WHERE age<27 UNION 
SELECT name,age FROM emp WHERE dep_id IN (1,2);
//等价于
SELECT name,age FROM emp WHERE age<27 OR dep_id IN (1,2);
//UNION 与 ORDER BY组合
SELECT name,age FROM emp WHERE age<27 UNION SELECT name,age 
FROM emp WHERE dep_id IN (1,2) ORDER BY age;


21、主键与外键
主键的两种添加方式
方式1:建表时添加唯一约束
create table 表名(
列名 数据类型 primary key auto_increment,

);
方式2:建完表后添唯一约束
alter table 表名 add primary key 字段名;
删除约束:
alter table 表名 drop primary key;
主键使用单个列,则该列中的每一个值都必须是唯一的;主键使用多个列,则这些列的组合值必须是唯一的。

外键添加方式:
alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称 (主表列名称);

在这里插入图片描述


22、指定默认值
MySQL允许使用DEFAULT关键字指定默认值,默认在CREATE TABLE 语句的列定义中使用DEFAULT。在开发时大多使用默认值而非NULL。与大多数的DBMS不一样,MySQL不允许使用函数作为默认值。

CREATE TABLE students IF NOT EXISTS(
id int NOT NULL AUTO_INCREMENT,
stu_name char(50) NOT NULL,
stu_address char(50) NULL,
stu_email char(50) NULL,
stu_inschool int NOT NULL DEFAULT 1,
PRIMARY KEY (id)
)ENGINE=InnoDB;


23、引擎类型
和其他数据库管理系统(DBMS)一样,MySQL有一个具体管理和处理数据的内部引擎。与其他DBMS不同的是,MySQL有多种引擎,全部能执行 CREATE TABLE、SELECT等命令。在MySQL中针对不同任务选择正确的引擎能够获得良好的功能和灵活性。
MySQL通过ENGINE来选择对应的引擎,当该关键字省略时,则使用默认引擎(很可能是MyISAM)
几种重要引擎:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL精简复习 的相关文章

随机推荐

  • AS3 通过方法名称 进行调用

    package public class ObjectBinder public var targetInstance public function ObjectBinder targetInstance this targetInsta
  • 运维常用工具

    操作系统 Centos Ubuntu Redhat suse Freebsd 网站服务 nginx apache lighttpd php tomcat resin 数据 库 MySQL MariaDB PostgreSQL DB中间件 m
  • Android Handler被弃用,那么以后怎么使用Handler,或者类似的功能

    Android API30左右 Android应用在使用传统写法使用Handler类的时候会显示删除线 并提示相关的方法已经被弃用 不建议使用 Handler handler new Handler Override public void
  • PyQt5学习记录----案例1实践

    案例1 创建多个用于信息提示的QLabel 要求 1 凡是提示的QLabel控件 都需设置 字体大小 25px 字体颜色 灰色 边框圆角 8px 2 信息提示分多个级别 正常 normal 绿色边框及字体 警告 warning 黄色边框及字
  • 前端技术搭建井字游戏(内含源码)

    The sand accumulates to form a pagoda 写在前面 功能介绍 页面搭建 样式设置 逻辑部分 写在前面 上周我们实通过前端基础实现了飞机大战游戏 今天还是继续按照我们原定的节奏来带领大家完成一个井字游戏游戏
  • QT vector转QVector(来自stackflow)

    std vector
  • el-popover弹出框更新位置刷新定位

    问题背景 当使用el popover弹框提示 又需要同时加载数据时 就会出现位置错位的现象 原因不言而喻 插件先计算了el popover的位置 然后加载数据又改变了el popover的宽高 如下 问题解决 模拟触发元素被点击 this
  • Python接口自动化测试之pytest:(一)参数化执行

    Pytest是非常流行的Python测试框架 适用于单元测试 UI测试 接口测试 一 一个简单的Pytest测试例子 Pytest可以在命令行模式下直接使用命令执行测试脚本 执行Pytest命令后将会自动匹配到以test开头或结尾的文件 并
  • python入门教程之爬虫的概述及简单实践练习

    文章目录 一 我们先了解用户获取网络数据的方式 二 简单了解网页源代码的组成 1 web基本的编程语言 2 使用浏览器查看网页源代码 三 爬虫概述 1 认识爬虫 2 python爬虫 3 爬虫分类 4 爬虫应用 5 爬虫是一把双刃剑 6 p
  • arcgis10.2 SDE (sqlserver)安装及使用

    1 下载 链接地址 http pan baidu com s 1DsMEe 提取密码 3in6 2 安装 3 数据库的安装与配置 数据库的安装不赘述 需要说明白的是 如果是安装多了多个数据库 数据库实例的名字一般是 主机名 实例名 可以通过
  • 与服务器的连接以获取信息,怎么从服务器获取数据库连接

    怎么从服务器获取数据库连接 内容精选 换一换 创建弹性云服务器 请参见 弹性云服务器用户指南 该弹性云服务器用于连接云数据库RDS实例 需要与目标实例处于同一虚拟私有云内 正确配置安全组 使得弹性云服务器可以通过 连接地址 访问云数据库RD
  • dga 分析

    02n 0iy6gn3ozzwmyu 7i43n9qil1g1z2 com0e527eaf 5ec5 4623 9fe9 e459583acd72 com0fmgm1cuu7h1279dghgka0ltg com0gqo9jx0ir0rjy
  • javascript 贪心算法说明

    贪心算法 贪心算法遵循一种近似解决问题的技术 期盼通过每个阶段的局部最优选择 当前最好的解 从而达到全局的最优 全局最优解 最少硬币找零问题 最少硬币找零是给出要找零的钱数 以及可以用硬币的额度数量 找出有多少种找零方法 如 美国面额硬币有
  • 推荐系统实践(一)----基于用户的协同过滤算法(UserCF)

    随着信息技术和互联网的发展 人们逐渐从信息匮乏的时代走入了信息过载的时代 在这个时代 无论是信息消费者还是信息生产者都遇到了很大的挑战 如何从大量信息中找到自己感兴趣的信息是一件非常困难的事情 这个时候就需要推荐系统 推荐系统不需要用户提供
  • 【GPU】GPU状态显示和部分指标含义

    首先打开C盘 找到NVSMI文件夹 找到nvidia smi exe 打开cmd 将其exe拖到命令提示符窗口 回车后显示GPU信息 相应的指标信息如下 GPU GPU 编号 Name GPU 型号 Persistence M 持续模式的状
  • RocksDb与LevelDB

    1 RocksDB也开始支持HDFS 允许从HDFS读取数据 而LevelDB则是一个比较单一的存储引擎 2 RocksDB支持一次获取多个K V 还支持Key范围查找 LevelDB只能获取单个Key 3 RocksDB除了简单的Put
  • 基于深度学习的车辆信息识别(一):车辆颜色识别

    背景 导师给的一个项目任务 要求对卡口拍摄的车辆监控图片进行自动识别 识别目标包括 车牌号 车辆颜色 车辆品牌 具体到如奥迪A6之类 驾驶人是否系安全带 是否贴有年检标志 等等 相当有挑战性的任务 哈 打算先实现相对简单一些的任务 如颜色
  • linux下安装node环境

    目录 1 在官网下载node的linux版本 2 下载连接服务器的Xshell和Xftp工具 3 Xshell和Xftp连接到远程服务器 4 使用Xftp将下载好的linux的node版本移动到服务器上 5 使用Xshell进行解压安装 6
  • 队列 和 循环队列

    队列也是一种运算受限制的线性表 它只允许在表的一端进行插入 而另外一段只允许进行删除 允许删除的一端称为队头 Front 允许删除的一端称为队尾 Rear 顺序队列实际上是受限的顺序表 和顺序表一样 顺序队列也必须采用一个数组来存放当前数据
  • MySQL精简复习

    1 常用关键字增删查改 INSERT DELECT SELECT UPDATE 以及表创建 CREATE 在使用DELETE时 不要省略WHERE子句 否则就会错误地删除表中所有行 INSERT INTO 表名 各个字段名称用逗号隔开 VA