SQL语句快查

2023-05-16

SQL语句

0. MYSQL登陆

mysql -u root -p 

1. 创建数据库

CREATE DATABASE <name>;

2. 查看数据库

SHOW DATABASES ;

3. 删除数据库

DROP DATABASES <name>; 

4. 使用数据库

USE <name>;

5. 创建表

这里给出MySQL常见数据类型的链接

CREATE TABLE table_name (column_name column_type);

MySQL

CREATE TABLE student(
   student_id INT NOT NULL AUTO_INCREMENT,
   student_name VARCHAR(20) NOT NULL,
   student_score INT check(student_score>=0 and student_score<=100),
   student_age INT check(student_age >=0),
   PRIMARY KEY ( student_id )
);

外键:

CREATE TABLE class(
   student_id INT PRIMARY KEY,
   class VARCHAR(20) NOT NULL,
   CONSTRAINT FOREIGN KEY /*这里可以写外键的名字*/(student_id ) REFERENCES  student(student_id)
);

MySQL注释

#我是注释 
/*我是注释*/
-- 我是注释

6. 表的详情

desc +表名用来显示表的状态,包括列名(column name),各个列的类型(Type),各个列的值类型,主外键(Key),默认值,其他;示例如下:

desc <name>;

7. 删除表

DROP TABLE <name>;

8. 插入数据

基础语法

INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );

实例

INSERT INTO student ( student_id , student_name,student_score,student_age  )
                    VALUES
                    ( 1, "李雷", 60, 19 );                            

插入多条数据

INSERT INTO table_name (field1, field2,...fieldN)  
					   VALUES  
					   (valueA1,valueA2,...valueAN),
					   (valueB1,valueB2,...valueBN),  		  
					   (valueC1,valueC2,...valueCN);

插入数据也有其他两种语句

INSERT INTO student VALUES ( 1, "李雷", 60, 19 );
INSERT INTO student (student_id ,student_name) VALUES (1, "李雷");

9. 查询数据

SELECT student_id ,student_name
FROM student [AS]<name>
[WHERE Clause]
[OFFSET M ][LIMIT N]
  • 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
  • SELECT命令可以读取一条或者多条记录。
  • 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
  • 你可以使用 WHERE语句来包含任何条件。
  • 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
  • 你可以使用 LIMIT 属性来设定返回的记录数。

例如:
挑选前三个student_id>1的学生

SELECT *
FROM student 
WHERE student_id >1
LIMIT 3;

10. where 子句

语句语法

WHERE <查询条件> {<判定运算1><判定运算2>,…}

1. <表达式1>{=|<|<=|>|>=|<=>|<>|!=}<表达式2>

其中: <> 为不等于,<=> 为严格比较两个NULL值是否相等

SELECT *
FROM student 
WHERE student_id = 1;

2. <表达式1>[NOT]LIKE<表达式2>

LIKE 为模糊查询
常用符号:

  • % 是 MySQL 中常用的一种通配符,在过滤条件中,百分号可以表示任何字符串,并且该字符串可以出现任意次
  • _ 下划线通配符和百分号通配符的用途一样,下画线只匹配单个字符,而不是多个字符,也不是 0 个字符

例如:

挑选出名字中含雷的学生

SELECT *
FROM student 
WHERE student_name LIKE "%雷%";

3. <表达式1>[NOT][REGEXP|RLIKE]<表达式2>

REGEXP 为MySQL中的正则表达式
这里涉及正则表达式的内容,我这里给出一个正则表达式的链接

挑选不以A开头的学生

SELECT *
FROM student 
WHERE student_name REGEXP "^[^a]";

4. <表达式1>[NOT]BETWEEN<表达式2>AND<表达式3>

BETWEEN 常用于查询在某一段日期直接或是在某一段区间

SELECT *
FROM student 
WHERE student_age BETWEEN 16 AND 20;

5. <表达式1>IS[NOT]NULL

挑选年龄不为空的学生

SELECT *
FROM student 
WHERE student_age IS NOT NULL;

11. 更新表信息

UPDATE <name> SET field1=new-value1, field2=new-value2
[WHERE Clause]

将所有60分以下的学生的成绩改成60分

UPDATE student set student_score =60
where student_score<60;

将所有60分以下的学生的成绩改成60分

UPDATE student set student_score =60
where student_score<60;

将所有60分以下的学生的年龄改为18(毫无逻辑,仅仅为举例子)

UPDATE student set student_age=18
where student_score<60;

12. NULL 值处理

  • IS NULL: 当列的值是NULL,此运算符返回true
  • IS NOT NULL: 当列的值不为NULL, 运算符返回true
  • <=>: 比较操作符(不同于=运算符),当比较的的两个值为NULL时返回true

我们可以使用前面的 UPDATE 语句进行NULL的处理,如将空值附上值

UPDATE student set student_score=60
where stduent_score is null;

将非空值清空:

UPDATE student set student_score=NULL
where stduent_score is not null;

13. 删除表信息

DELETE FROM table_name 
[WHERE Clause]

将成绩小于60的学生删除(被退学了)

DELETE FROM table_name 
where student_score<60;

14. 排序

对我们挑选的数据进行排序

SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]

选择名字里带雷的学生,并按照成绩进行顺序排序 (ASC:顺序,DESC:逆序)

SELECT * FROM student 
where student_name = "%雷%"
ORDER BY student_score ASC;

15. 分组查询

常见的统计函数

函数作用
COUNT求数量
MAX最大值
MIN最小值
SUM求和
AVG求平均值
POW(x,y)求x的y次方
…………

在这里插入图片描述

SELECT COUNT(salary) 人数 ,MAX(salary) 最大薪水,MIN(salary) 最小薪水,AVG(salary) 平均薪水  from employee;

在这里插入图片描述
更多的函数见https://www.runoob.com/mysql/mysql-functions.html

使用group by 分组展示

salary 分组:

SELECT salary,COUNT(*) FROM employee
GROUP BY salary;

在这里插入图片描述

16. 连接查询

select语句也可以做常见的连接

以下面两表为例:

1. employee表
在这里插入图片描述
2. department表
在这里插入图片描述

SELECT a.name,a.age,b.people_num FROM employee a,department b
where a.in_dpt=b.dpt_name;

JOIN语句

  • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录
  • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录
  • RIGHT JOIN(右连接): 与 LEFT JOIN 相反

INNER JOIN

在这里插入图片描述

SELECT column_name(s) FROM table1 JOIN table2
ON table1.column_name=table2.column_name;

以下面两表为例:

1. employee表
在这里插入图片描述
2. department表
在这里插入图片描述

SELECT a.name,a.age,b.people_num FROM employee a join department b
on a.in_dpt=b.dpt_name;

在这里插入图片描述

LEFT JOIN

在这里插入图片描述

SELECT a.name,a.age,b.people_num FROM employee a left join department b
on a.in_dpt=b.dpt_name;

因为 employeein_dptdepartment 中的 dpt_name 都存在
在这里插入图片描述

RIGHT JOIN

在这里插入图片描述

SELECT a.name,a.age,b.people_num FROM employee a right join department b
on a.in_dpt=b.dpt_name;

在这里插入图片描述

其他JOIN

在这里插入图片描述

17.子查询

子查询的效率较低于连接查询,而且子查询均可用连接查询替换

常用操作符:

  • IN : 判断一个给定值是否存在于子查询的结果集中,当存在则返回TRUE
  • ALL : 用于指定表达式需要与子查询结果集中的每个值都进行比较,当表达式与每个值都满足比较关系时,会返回 TRUE
  • SOME(ANY) : 只要与子查询结果集中的某个值满足比较关系,就返回TRUE
  • EXIST : 若子查询的结果集不为空,则返回 TRUE;否则返回 FALSE

以下面两表为例:

1. employee表
在这里插入图片描述
2. department表
在这里插入图片描述
通过 department表 查询employeein_dpt 所对应的 people_num>11 的员工的名字

SELECT name FROM employee
WHERE in_dpt in 
(SELECT dpt_name FROM department
WHERE people_num>11)

在这里插入图片描述
如果 in_dpt 的值在department表department 存在,就返回

SELECT * FROM employee
WHERE EXISTS
(SELECT dpt_name FROM department
WHERE dpt_name=in_dpt)

在这里插入图片描述
其它的我就不多举例子了,大家可以多多自行尝试

18. 修改表

ALTER TABLE 语句来改变原有表的结构,例如增加或删减列、创建或取消索引、更改原有列类型、重新命名列或表等。

修改表名

ALTER TABLE OLD_TABLE_NAME RENAME TO NEW_TABLE_NAME;

在这里插入图片描述

ALTER TABLE student RENAME TO student_new;

在这里插入图片描述

修改表结构

增加列

ALTER TABLE table_name
ADD column_name datatype

在这里插入图片描述

ALTER TABLE student_new
ADD tele int(11);
DESC student_new;

在这里插入图片描述

改变数据类型实例

ALTER TABLE student_new
modify COLUMN tele CHAR(11);

在这里插入图片描述

删除列

ALTER TABLE student_new
DROP COLUMN tele;

在这里插入图片描述

已删除tele...

更新数据

对于如下课程表经学分数置为原来2倍
在这里插入图片描述

UPDATE 课程表 SET 学分数=2*学分数;

在这里插入图片描述
将不为高等数学的科目的学时数+2

UPDATE 课程表 SET 学时数=学时数+2 where (课程名<>'高等数学');

在这里插入图片描述
这里的使用方法与select相似,不多赘述了

19. MySQL导入导出sql文件(windows)

导入:

mysql -u 用户名 -p 数据库名 < 存放位置
mysqljump -u root -p test < c:/a.sql

导出:

mysqldump -u 用户名 -p 数据库名 > 存放位置
mysqldump -u root -p test > c:/a.sql

20. 创建视图

视图基础

1. employee表
在这里插入图片描述
2. department表
在这里插入图片描述
3. 创建视图

CREATE VIEW my_view AS 
(SELECT a.name,a.age,a.phone,a.in_dpt,b.people_num FROM employee a join department b
WHERE a.in_dpt=b.dpt_name)

在这里插入图片描述

21. 查看视图

DESCRIBE <view name>

在这里插入图片描述

22. 删除视图

删除视图需要有权限,超级管理员当我没说…

DROP VIEW <视图名>

23. 修改视图

视图是一个虚拟表,实际的数据来自于基本表,所以通过插入、修改和删除操作更新视图中的数据,实质上是在更新视图所引用的基本表的数据,然而并非所有的视图都可以更新所引用的基本表:只有视图来自于基本表的行列子集才可以更新

对于 ALTER VIEW 语句的使用,需要用户具有针对视图的 CREATE VIEW 和 DROP 权限,以及由 SELECT 语句选择的每一列上的某些权限。

当然也可通过修改 ALTER VIEW 外,也可以使用 DROP VIEW 语句先删除视图,再使用 CREATE VIEW 语句来实现

ALTER VIEW <视图名> AS <SELECT语句> 

具体删除字段的写法
alter view 视图名 as 
select 你想要留下来的字段(不写你要删除的字段)
from 视图名

同理视图的更新等同于的更新

UPDATE <视图名> SET <修改的内容>
UPDATE 课程视图 SET 学时数=学时数+2 where (课程名<>'高等数学');

对于上面的表 课程表
在这里插入图片描述

CREATE VIEW 课程视图 AS (SELECT * FROM 课程表);
UPDATE 课程视图 SET 学时数=学时数-2 where (课程名<>'高等数学');
这里的表和视图均发生了改变

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

24. 完整性约束

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

SQL语句快查 的相关文章

  • ORACLE 在立即执行中批处理 DDL 语句

    我正在尝试在一个 Execute Immediate 语句中运行多个 ddl 语句 我认为这会很简单 但看来我错了 想法是这样的 declare v cnt number begin select count into v cnt from
  • SQL 语法检查器和验证器? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有类似 SQL 的 lint 语法检查器和验证器 之类的东西 有一个项目 SQLLint 检测 S
  • 分组依据检索 3 个值

    我有以下查询 SELECT Cod MIN Id AS id Min MAX Id AS id Max retrieve value in the middle COUNT AS Tot FROM Table a NOLOCK GROUP
  • T-SQL 相当于 =rand()

    我有几个内容表 我想用随机的文本段落填充它们 在 MS Word 中 我只需输入 rand 即可 我收到三段新鲜的文字 是否有 SQL 脚本 命令可用于使用 t sql 生成随机字典单词 declare Lorem nvarchar max
  • 如何在存储过程中使用名称求和和分组?

    我想对钱列求和 但我想要状态中的组名称和代码 这是存储过程代码 Sql Server 2008 SELECT um upmoney as money um pId as code um FName as name up status as
  • EF4 和 SQL Server 2000

    我使用 EF4 和 SQL Server 2005 开发了我的网站 但当转移到临时站点时 发现他们使用 SQL Server 2000 现在我收到此错误 我认为该错误与 SQL Server 2000 有关 Incorrect syntax
  • Linq lambda表达式多对多表选择

    我有三个表 其中两个是多对多关系 Picture 这是中间mm表中的数据 Edit 到这里 我得到正确的 4 行返回 但它们都是相同的结果 我知道我需要返回 4 行 但有不同的结果 return this mediaBugEntityDB
  • 方法“Boolean Contains(System.String)”不支持对 SQL 的转换

    方法 Boolean Contains System String 不支持对 SQL 的转换 查询是 IsQueryable 但这停止工作 foreach string s in collection1 if s Length gt 0 q
  • Postgres 上的 C 语言环境和 Posix 语言环境有什么区别?

    我知道 Postgres 上的数据库区域设置负责国家字符的正确顺序 正确的小写 大写等 但为什么有两种语言中立的语言环境 posix and c 它们之间有什么区别 还是只是一个中立的语言环境有两个不同的名称 UPDATE正如 Magnus
  • 如何手动设置auto_increment的下一个值?

    我手动向表中添加了一些行 并且还手动设置了 ID 自动增量 现在 当我尝试通过我的应用程序将新行添加到数据库表中时 我收到错误 创建的 ID 值已存在 如何手动设置下一个ID值 例如 在表中我必须有ID 那么如何告诉PostgreSQL 下
  • 如何在 SQL 中进行广度优先搜索?

    给定一棵存储为关系的树 Parent Child 1 2 1 3 3 4 3 5 2 6 7 8 7 9 如何获取给定节点的所有后代 例如 对于 1
  • SQL注入方法

    注射程序是 SELECT UserId Name Password FROM Users WHERE UserId 105 or 1 1 但是 我的问题是注入查询在 sql 中是如何工作的 当你在代码中将查询作为字符串时 就像这样 Quer
  • 金融 - 计算到期收益率

    我读了this https stackoverflow com questions 1173555 open source financial library specifically yield to maturity发布关于 net 库
  • 查询从同一表中的另一条记录获取值并按大于间隙阈值的差异进行过滤

    我将数据导入到 MS Access 中的临时表中 如下所示 我添加了需要使用 SQL 查询计算的 Gap 和 Previous Current 列 间隙阈值 是用户输入或范围提供给查询和例如是 300 GlobalID 对 ItemID 进
  • 如何在oracle中获取表作为输出参数

    我正在尝试将 Oracle 过程调用的 out 参数强制转换为对象 它不起作用 因为 据我了解 我需要定义一个映射 它告诉方法如何转换它 如果地图为空或未正确填充 则它默认为 STRUCT 类型的对象 在我的情况下这是错误的 我已经构建了一
  • C# 查询两个数据库的数据

    我目前有一个查询 我正在从两个不同的数据库获取数据 这些数据被附加到一个名为 accountbuys 的列表中 我的第一个表有三个数据条目 3个想要购买股票的帐户 下一张表有 17 个数据点 购买 17 只股票 I am merging t
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • ActiveRecord 查询,按关联排序,最后一个 has_many

    我试图列出所有Users by the created at最近创建的关联记录 通讯 列 到目前为止我所拥有的 User includes communications order communications created at IS
  • SQLite 中的累积求和值

    我正在尝试在 SQLite 中执行值的累积和 我最初只需要对一列求和并获得代码 SELECT t MyColumn SELECT Sum r KeyColumn1 FROM MyTable as r WHERE r Date lt t Da
  • Postgresql:SERIAL 在约束 INSERT 失败时递增

    有一个像这样的简单表结构 CREATE TABLE test id INT PRIMARY KEY sid SERIAL 我注意到如果我尝试插入一行但它未通过约束测试 即主键约束 SERIAL计数器无论如何都会增加 所以下一次成功插入 si

随机推荐

  • MongoDB常用操作命令理解与实战

    文章目录 一 创建操作命令1 数据库操作2 创建集合和添加文档 二 查询操作命令和常用函数1 N A2 查看集合3 文档简单查询4 文档条件查询5 Mongo查询条件和SQL查询对照表6 复合主键7 逻辑操作符匹配 not用法 and 用法
  • 连接数据库时出现10061错误

    问题 xff1a 用Navicat连接数据库时出现10061错误 通过百度证明原因是连接不上MySQL服务器 解决方案 xff1a 打开 我的电脑 点击 管理 点击 计算机管理 服务和应用程序 找到 服务 找到 Mysql xff0c 然后
  • TF-IDF

    1 TF IDF是什么 xff1f TF IDF xff1a term frequency inverse document frequency 1 tf idf 作为一种权重经常被用作信息检索和文本挖掘领域 2 这样一种权重时通过统计计算
  • 搭建STP生成树协议访问服务器

    拓扑图 xff1a 理解 1 确定交换机的角色 xff1a 根交换机 非根交换机 xff0c 比较原则优选级 xff0c 越小越好 xff1b 其次比较MAC地址 xff0c 越小越好 xff1b 2 确定端口的角色 xff1a 根端口 指
  • Hexo博客绑定自己的域名

    1 购买域名 国内的域名服务商有新网 xff0c 腾讯云 xff0c 还有阿里云的万网等 我用的是阿里云 在万网购买了的域名后 xff0c 进入阿里云的管理控制台 域名与网站 域名就可以看到购买的域名此时的域名状态是未实名认证的 xff0c
  • MATLAB学习之图片放大缩小(双线性插值法)

    MATLAB学习之图片放大缩小 这是数字图像处理实验内容 xff0c 老师规定用双线性插值法进行放大缩小 xff0c 不过双线性插值法也太难了吧 xff01 xff01 xff01 代码如下 xff1a span class token o
  • Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?报错

    在linux上使用apt get方式安装nginx时提示Unable to fetch some archives maybe run apt get update or try with fix missing 最后发现是源出现了问题 v
  • chrony

    CentOS8 时间同步服务 CentOS7之前的版本用的是ntpdate服务 xff0c 之后用的是chrony服务 默认是安装的了 查看版本 root 64 centos8 rpm qi chrony Name chrony Versi
  • 网易云音乐(netease-cloud-music)无法通过图标打开,只能用命令行开启

    解决办法 xff08 两种任选其一 xff09 xff1a 1 打开文件桌面图标文件netease cloud music desktop xff1a sudo gedit usr share applications netease cl
  • java: 程序包org.apache.ibatis.annotations不存在

    这个错误是我在直接导入springboot项目的时候报错的 xff0c 解决方法是新建一个spring项目 xff0c 之后将相关文件导入该项目中解决的 导入项目出现错误时可以考虑这样处理一下试试
  • angularJS中把html格式的字符串转成html格式显示,ng-bind-html与trustAsHtml的过滤器

    分享一下我老师大神的人工智能教程 xff01 零基础 xff0c 通俗易懂 xff01 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 xff0c 造福人民 xff0c 实现我们中华民族伟大
  • 【设计模式】生产者消费者模型

    带你轻松理解生产者消费者模型 xff01 生产者消费者模型可以说是同步与互斥最典型的应用场景了 xff01 文末附有模型简单实现的代码 xff0c 若有疑问可私信一起讨论 文章目录 一 xff1a 为什么要使用生产者消费者模型 xff1f
  • matlab的for循环

    a span class token operator 61 span span class token function rand span span class token punctuation span span class tok
  • 论文笔记之 Collaborative Deep Learning for Recommender Systems

    这篇论文是KDD2015的一篇用DL去做RS的论文 想法挺有意思的 看过论文的同学都知道整体的模型可以用下图表示 xff1a 这里只讲讲整体的思路与理解 xff1a 1 xff09 这是一个CF和CBF结合用bayes去做 2 xff09
  • QGC地面站参数调节

    校准 xff1a 1 选择机架 xff1a 一般用DJI Flame Wheel F450机架 xff0c 选择之后点击 应用并重启 xff1b 2 传感器校准 xff1a 无人机会重新连接地面站 xff0c 依次校准 磁罗盘 陀螺仪 xf
  • 【Java】线程超时(设置一段代码执行超时时间)

    引用原文 xff1a https blog csdn net educast article details 51864912 代码 public class ThreadTest public static void main Strin
  • HDFS入门简介

    HDFS是什么 xff1f 易于扩展的分布式文件系统运行在大量普通廉价机器上提供容错机制为大量用户提供性能不错的存取服务 设计目标 xff1a 自动快速检测应对硬件错误流式访问数据 以流的方式访问数据 xff0c 设计用于数据的批量处理 缺
  • Android对于Fragment的使用以及底部导航栏问题

    fragment 一直提示fragment类型不对 该错误是在我们创建的fragment类文件中导错了包 底部导航栏不显示文字 在该处加上app labelVisibilityMode 61 34 labeled 34 就可以全部显示了 原
  • 建立个人网站1:腾讯云域名购买,域名解析以及使用GitHub初步搭建网站

    建立个人网站1 申请域名 xff0c 域名解析以及使用GitHub初步显示 腾讯云的学生优惠申请了一个域名 然后用了GitHub的服务器搭了网站 xff0c github优点是不用备案 xff0c 域名解析把GitHub的个人域名复制过来就
  • SQL语句快查

    SQL语句 0 MYSQL登陆 mysql u root p 1 创建数据库 span class token keyword CREATE span span class token keyword DATABASE span span