search
HomeDatabaseMysql Tutorial标准SQL语言的用法_MySQL

SQL语言是目前最通用的关系数据库语言。ANSI SQL是指由美国国家标准局(ANSI)的数据库委员会制定的标准SQL语言,多数关系数据库产品支持标准SQL语言,但是它们也往往有各自的SQL方言。

 

在分层的软件结构中,关系数据库位于最底层,它的上层应用都被称为数据库的客户程序。以MySql为例,mysql.exe和Java应用就是它的两个客户程序。这些客户程序最终通过SQL语言与数据库通信。

 

SQL(Structured Query Language)的英语全称可翻译为结构化查询语言,但实际上它除了具有数据查询功能,还具有数据定义、数据操纵和数据控制功能。

 

SQL语言的类型

 

语言类型 描述 SQL语句

DDL(Data Definition Language) 数据定义语言,定义数据库中的表、视图和索引等 create、drop和alter语句

DML(Data Manipulation Language) 数据操纵语言,保存、更新或删除数据 insert、update和delete语句

DQL(Data Query Language) 数据查询语言,查询数据库中的数据 select语句

DCL(Data Control Language) 数据控制语言,用于设置数据库用户的权限 grant和remove语句

 

数据完整性

 

当用户向数据库输入数据时,由于种种原因,用户有可能输入错误数据。保证输入的数据符合规定,成为数据库系统,尤其是多用户的关系数据库系统首要关注的问题。为了解决这一问题,在数据库领域出现了数据完整性的概念。数据完整性(Data Integrity)就是指数据必须符合的规范,它主要分为三类:

 

实体完整性(Entity Integrity)

规定表的一行(即每一条记录)在表中是唯一的实体。实体完整性通过表的主键来实现。

 

域完整性(Domain Integrity)

指数据库表的列(即字段)必须符合某种特定的数据类型或约束。如not null。

 

参照完整性(Referential Integrity)

保证一个表的外键和另一个表的主键对应。

 

DDL数据定义语言

 

用于定义数据库中的表、视图和索引等。相关DDL语句如下:

 

createtable:创建一个表。

crate table CUSTOMERS(

 

ID bigint not null,

 

NAME varchar(15) not null,

 

AGE int,

 

primary key (ID)

 

);

 

crate table ORDERS(

 

ID bigint not null,

 

ORDER_NUMBER varchar(15) not null,

 

PRICE double precision,

 

CUSTOMER_ID bigint,

 

foreign key(CUSTOMER_ID) references CUSTOMERS(ID)

 

);

 

在创建数据库schema时,通常所有表的DDL语句都放在同一个SQL脚本文件中,必须按照先父表后子表的顺序来定义DDL语句。假如表之间的参照关系发生变化,就必须修改DDL语句的顺序,这增加了维护SQL脚本文件的难度。为了解决这一问题,可以采用另一种方式来定义外键。

 

crate table CUSTOMERS(

 

ID bigint not null,

 

NAME varchar(15) not null,

 

AGE int,

 

primary key (ID)

 

);

 

crate table ORDERS(

 

ID bigint not null,

 

ORDER_NUMBER varchar(15) not null,

 

PRICE double precision,

 

CUSTOMER_ID bigint,

 

primary key (ID)

 

);

 

alter table ORDERS add constraint FK_CUSTOMER foreign key (CUSTOMER_ID) references CUSTOMERS(ID);

 

altertable:修改一个表。

droptable:删除一个表,同时删除表中所有记录。

DML数据操纵语言

 

DML用于向数据库插入、更新或删除数据,这些操作分别对应insert、update和delete语句。

 

在执行这些语句时,数据库系统先进行数据完整性检查,如果这些语句违反了数据完整性,数据库系统会异常终止执行SQL语句。

 

DQL数据查询语言

 

SQL语言的核心就是数据查询语言。查询语句的语法如下:

 

select 目标列 from 基本表(或视图) [where 条件表达式] [group by 列名1[having 条件表达式]] [order by 列名2[asc|desc]] 

 

简单查询

简单SQL查询语句,其中where子句设定查询条件,order by子句设定查询结果的排序方式。

 

(1)查询年龄在10到50之间的客户,查询结果先按照年龄降序排列,再按照名字升序排列。

 

select * from customers where age between 18 and 50 order by age desc,name asc;

 

(2)查询名字为“Tom”、“Mike”、“Jack”的客户。

 

select * from customers where name in (‘Tom’,’ Mike’,’ Jack’);

 

(3)查询姓名的第二个字母是“a”的客户。

 

select * from customers where name like ‘’_a%’’;

 

(4)查询年龄为null的客户的名字。

 

select name from customers where age is null;

 

注意:不能用表达式age=null来比较age是否为null,因为这个表达式的值既不为true,也不为false,而是永远为null。当where子句的取值为null,select的查询语句的查询结果为空。

 

(5)在查询语句中为表和字段指定别名:

 

select name c_name,age c_age from customer c where c.id=1;

 

连接查询

连接查询的from子句的连接语法格式为:

 

from talbe1 join_type table2 [on (join_condition)] [where (query_condition)]

 

table1和talbe2表示参与连接操作的表,table1为左表,table2为右表。on子句设定连接条件,where子句设定查询条件,join_type表示连接类型,可分为3种:

 

交叉连接(cross join):不带on子句,返回连接表中所有数据行的笛卡儿积。

Select * from customers,orders;

 

返回两张表中记录数的乘积。若customers中有5条记录,orders表中有7条记录,则结果返回35条记录。

 

内连接(inner join):返回连接表中符合连接条件及查询条件的数据行。

显式内连接:使用inner join关键字,在on子句中设定连接条件

 

Select c.id,o.customer_id,c.name,o.id roder_id,order_number from customers c inner join orders o on c.id=o.customer_id;

 

隐式内连接:不包含inner join关键字和on关键字,在where子句中设定连接条件

 

Select c.id,o.customer_id,c.name,o.id order_id,order_number from customers c,orders o where c.id=o.customer_id;

 

外连接:分为左外连接(left outer join)、右外连接(right outer join)。与内连接不同的是,外连接不仅返回连接表中符合连接条件及查询条件的数据行,也返回左表(左外连接时)或右表(右外连接时)中仅符合查询条件但不符合连接条件的数据行。

Select c.id,o.customer_id,c.name,o.id order_id,order_number from customers c left outer join orders o on c.id=o.customer_id;

 

以上查询语句的查询结果不仅包含符合on连接条件的数据,还包含customers左表中的其他数据行。

 

子查询

子查询也叫嵌套查询,是指在select子句或者where子句中又嵌入select查询语句,下面举例说明它的用法。

 

1)查询具有3个以上订单的客户:

 

select * customers c where c

 

2)查询名为“Mike”的客户的所有订单

 

select * from orders o where o.customer_id in (select id form cutomers where name=’Mike’);

 

3)查询没有订单的客户:

 

select * from customers c where 0=(select count(*) from order o where c.id=o.customer_id);

 

或者

 

select * from customers c where not exists (select * from orders o where c.id=o.customer_id);

 

4)查询ID为1的客户的姓名、年龄及它的所有订单的总价格:

 

select name,age,(select sum(price) from orders where customer_id=1) total_price from customers where id=1;

 

total_price是别名

 

也可以通过左外连接查询来完成相同的功能:

 

select name,age,sum(price) from customers c left outer join orders o on c.id=o.customer_id where c.id=1 group by c.id;

 

如果数据库不支持子查询,可以通过连接查询来完成相同的功能。事实上,所有的子查询语句都可以改写为连接查询语句。

 

联合查询

联合查询能够合并两条查询语句的查询结果,去掉其中的重复数据行,然后返回没有重复数据行的查询结果。联合查询使用union关键字,例如:

 

select * from customers where age=24;

 

报表查询

报表查询对数据行进行分组统计,其语法格式为:

 

[select …] from … [where…] [ group by … [having… ]] [ order by … ]

 

其中group by 子句指定按照哪些字段分组,having子句设定分组查询条件。在报表查询中可以使用以下SQL聚集函数。

 

count():统计记录条数

 

min():求最小值

 

max():求最大值

 

sum():求和

 

avg():求平均值

 

用法:

 

1)按照客户分组,查询每个客户的所有订单的总价格:

 

select c.id,c.name,sum(price) from customers c left outer join orders o on c.id=o.customer_id group by c.id;

 

2)按照客户分组,查询每个客户的所有订单的总价格,并且要求订单的总价格大于100:

 

select c.id,c.name,sum(price) from customers c left outer join orders o on c.id=o.customer_id group by c.id having(sum(price)>100);

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
在 Windows 11 上彻底删除不需要的显示语言的方法在 Windows 11 上彻底删除不需要的显示语言的方法Sep 24, 2023 pm 04:25 PM

在同一设置上工作太久或与他人共享PC。您可能会安装一些语言包,这通常会产生冲突。因此,是时候删除Windows11中不需要的显示语言了。说到冲突,当有多个语言包时,无意中按Ctrl+Shift会更改键盘布局。如果不注意,这将是手头任务的障碍。所以,让我们直接进入方法!如何从Windows11中删除显示语言?1.从设置按+打开“设置”应用,从导航窗格中转到“时间和语言”,然后单击“语言和地区”。WindowsI单击要删除的显示语言旁边的省略号,然后从弹出菜单中选择“删除”。在出现的确认提示中单击“

给语言大模型加上综合视听能力,达摩院开源Video-LLaMA给语言大模型加上综合视听能力,达摩院开源Video-LLaMAJun 09, 2023 pm 09:28 PM

视频在当今社交媒体和互联网文化中扮演着愈发重要的角色,抖音,快手,B站等已经成为数以亿计用户的热门平台。用户围绕视频分享自己的生活点滴、创意作品、有趣瞬间等内容,与他人互动和交流。近期,大语言模型展现出了令人瞩目的能力。我们能否给大模型装上“眼睛”和“耳朵”,让它能够理解视频,陪着用户互动呢?从这个问题出发,达摩院的研究人员提出了Video-LLaMA,一个具有综合视听能力大模型。Video-LLaMA能够感知和理解视频中的视频和音频信号,并能理解用户输入的指令,完成一系列基于音视频的复杂任务,

光动嘴就能玩原神!用AI切换角色,还能攻击敌人,网友:“绫华,使用神里流·霜灭”光动嘴就能玩原神!用AI切换角色,还能攻击敌人,网友:“绫华,使用神里流·霜灭”May 13, 2023 pm 07:52 PM

说到这两年风靡全球的国产游戏,原神肯定是当仁不让。根据5月公布的本年度Q1季度手游收入调查报告,在抽卡手游里《原神》以5.67亿美金的绝对优势稳稳拿下第一,这也宣告《原神》在上线短短18个月之后单在手机平台总收入就突破30亿美金(大约RM130亿)。如今,开放须弥前最后的2.8海岛版本姗姗来迟,在漫长的长草期后终于又有新的剧情和区域可以肝了。不过不知道有多少“肝帝”,现在海岛已经满探索,又开始长草了。宝箱总共182个+1个摩拉箱(不计入)长草期根本没在怕的,原神区从来不缺整活儿。这不,在长草期间

吵翻天!ChatGPT到底懂不懂语言?PNAS:先研究什么是「理解」吧吵翻天!ChatGPT到底懂不懂语言?PNAS:先研究什么是「理解」吧Apr 07, 2023 pm 06:21 PM

机器会不会思考这个问题就像问潜水艇会不会游泳一样。——Dijkstra早在ChatGPT发布之前,业界就已经嗅到了大模型带来的变革。去年10月14日,圣塔菲研究所(Santa Fe Institute)的教授Melanie Mitchell和David C. Krakauer在arXiv发布了一篇综述,全面调研了所有关于「大规模预训练语言模型是否可以理解语言」的相关争论,文中描述了「正方」和「反方」的论点,以及根据这些论点衍生的更广泛的智力科学的关键问题。论文链接:https://arxiv.o

GPT4ALL:终极开源大语言模型解决方案GPT4ALL:终极开源大语言模型解决方案May 17, 2023 am 11:02 AM

开源语言模型生态系统正在兴起,这些生态系统为个人提供综合资源以创建用于研究和商业目的的语言应用程序。本文深入研究GPT4ALL,它通过提供全面的搭建模块,使任何人都能开发类似ChatGPT的聊天机器人,从而超越了特定的使用案例。什么是GPT4ALL项目?GPT4ALL可以在使用最先进的开源大型语言模型时提供所需一切的支持。它可以访问开源模型和数据集,使用提供的代码训练和运行它们,使用Web界面或桌面应用程序与它们交互,连接到Langchain后端进行分布式计算,并使用PythonAPI进行轻松集

学Python,还不知道main函数吗学Python,还不知道main函数吗Apr 12, 2023 pm 02:58 PM

Python 中的 main 函数充当程序的执行点,在 Python 编程中定义 main 函数是启动程序执行的必要条件,不过它仅在程序直接运行时才执行,而在作为模块导入时不会执行。要了解有关 Python main 函数的更多信息,我们将从如下几点逐步学习:什么是 Python 函数Python 中 main 函数的功能是什么一个基本的 Python main() 是怎样的Python 执行模式Let’s get started什么是 Python 函数相信很多小伙伴对函数都不陌生了,函数是可

Azure AI的文本转语音功能已经支持41种多语言语音Azure AI的文本转语音功能已经支持41种多语言语音Aug 10, 2023 pm 07:05 PM

Microsoft的AzureAI文本转语音服务允许你将文本转换为不同语言的语音。今年年初,AzureAI文本转语音引入了JennyMultilingual语音,允许客户跨区域设置以一致的角色生成语音。到目前为止,Jenny多语言语音支持14种语言。今天,Microsoft宣布将多语言语音功能扩展到41种语言和口音。今天,Microsoft还宣布了一个新的男声(RyanMultilingual),作为其多语言产品组合的一部分。这些新语音具有输入文本的自动语言预测功能。因此,这消除了手动标记的需要

计算机硬件能直接识别并执行的语言是什么计算机硬件能直接识别并执行的语言是什么Dec 25, 2020 pm 03:16 PM

计算机硬件能直接识别并执行的语言是机器语言。机器语言是机器能直接识别的程序语言或指令代码,无需经过翻译,每一操作码在计算机内部都有相应的电路来完成它。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Tools

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft