mysql用的是标准sql_标准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<=(select count(*)="" from="" orders="" o="" where="" c.id="o.customer_id);

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);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三星有网络显示无网络连接到服务器,三星s5296连接了网络为什么不能用 看完这些原因就知道了...

1、无线网络本身有问题&#xff1a;如果手机连接上WiFi但却上不了网&#xff0c;首先要检查一下无线网络本身是否存在问题。这时候可以检查一下其他联网设备是否可以正常上网&#xff0c;如果可以的话&#xff0c;说明无线网络网络本身是没有问题的。如果其他联网设备也不能上网…

Mono for Android 篇二 使用Spinner 实现下拉列表读取Browser.BookmarksUri

http://www.cnblogs.com/ivanyb/archive/2013/03/05/2944818.html 1、首先在VS2010里面创建一个Android Application 简单说明一下解决方案中各个文件的作用&#xff1a; AndroidManifest.xml&#xff1a;项目环境配置文件&#xff0c;指明了使用Android SDK的版本&#xff0c;…

mysql不复制数据_windows mysql不停止服务复制数据

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

C++ 中的类模板

原文连接&#xff1a;http://see.xidian.edu.cn/cpp/biancheng/view/213.html 有时&#xff0c;有两个或多个类&#xff0c;其功能是相同的&#xff0c;仅仅是数据类型不同&#xff0c;如下面语句声明了一个类&#xff1a;class Compare_int{ public : Compare(int a,int b…

学生机房管理服务器系统设计,广东工业大学数据库课程设计机房管理系统设计...

《广东工业大学数据库课程设计机房管理系统设计》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《广东工业大学数据库课程设计机房管理系统设计(27页珍藏版)》请在人人文库网上搜索。1、课程设计个人报告课程名称 数据库应用与设计 _题目名称 机房管理系统 _学生学院 …

mysql磁盘临时表清理_mysql 创建大量磁盘临时表

发现 mysql 中创建的临时表基本都是磁盘临时表&#xff0c;对此进行排查。最后为临时表机制说明。通过查看 mysql 状态变量&#xff0c;看到创建的临时表基本都是磁盘临时表。查看临时表配置&#xff0c;默认配置 16M&#xff0c;配置并没有问题。创建两个表&#xff0c;做一个…

吃鸡服务器8月10日维护,《黑潮之上》2021年8月10日不停服维护公告

在黑潮之上手游中2021年8月10日更新了哪些有趣的内容呢&#xff1f;想了解本次更新情况如何的小伙伴们&#xff0c;接下来就让我们一起来看一下吧&#xff01;各位接触者:为了提供良好的游戏体验&#xff0c;保证服务器稳定运行&#xff0c;《黑潮之上》将于2021年8月10日早5:0…

资格赛:题目1:同构

时间限制:2000ms单点时限:1000ms内存限制:256MB描述 给定2个树A和B&#xff0c;保证A的节点个数>B的节点个数。 现在你需要对树A的边进行二染色。 一个好的染色方案&#xff0c;指不存在一个树A中的连通块&#xff0c;同时满足以下2个条件 1. 其中只有同色的边 2. 和B同构。…

如何使用Java 8 FlatMap JDBC ResultSet?

您还不喜欢机能吗&#xff1f; 这样标题可能不会引起您的共鸣-但文章会&#xff01; 相信我。 本质上&#xff0c;我们想要这样&#xff1a; ------------------ | col1 | col2 | col3 | ------------------ | A | B | C | row 1 | D | E | F | row 2 | G …

java 获取mysql链接_Java中如何获取mysql连接的3种方法总结

前言本文主要来说说三种 Java 中获取 mysql 连接的方式&#xff0c;分享出来供大家参考学习&#xff0c;下面话不多说了&#xff0c;来一起看看详细的介绍&#xff1a;第一种&#xff1a;传统的连接方式&#xff1b;第二种&#xff1a;读取配置文件方式&#xff1b;第三种&…

Netty writeAndFlush() 流程与异步

Netty writeAndFlush()方法分为两步, 先 write 再 flush Overridepublic ChannelFuture writeAndFlush(Object msg, ChannelPromise promise) {DefaultChannelHandlerContext next;next findContextOutbound(MASK_WRITE);ReferenceCountUtil.touch(msg, next);next.invoker.in…

JavaScript学习总结(六)——JavaScript判断数据类型总结

最近做项目中遇到了一些关于javascript数据类型的判断处理&#xff0c;上网找了一下资料&#xff0c;并且亲自验证了各种数据类型的判断&#xff0c;在此做一个总结吧&#xff01; 一、JS中的数据类型 1.数值型&#xff08;Number&#xff09;&#xff1a;包括整数、浮点数。 2…

material 项目_Web开发必备的 10 个开源项目,不用自己亲自造轮子!

来自&#xff1a;Java and Python君Web 开发中几乎的平台都需要一个后台管理&#xff0c;但是从零开发一套后台控制面板并不容易&#xff0c;幸运的是有很多开源免费的后台控制面板可以给开发者使用&#xff0c;那么有哪些优秀的开源免费的控制面板呢&#xff1f;我在 Github 上…

香辣弹簧:自动接线的不同方法

我想展示使用Spring的Autowired批注的不同方式&#xff1a; Constructor &#xff0c; Method和Field自动装配。 我展示的示例都是byType自动装配模式的一种形式&#xff08; constructor自动装配模式类似于byType &#xff09;。 请参阅Spring Reference指南 &#xff0c;以获…

SVN部署(本地)

1.安装TortoiseSVN 2.建立Repository。在F:/下建立文件夹SVN_NATIVE_REPOSITORY&#xff0c; —— 》 3.在其他任意路径建立任意名称的路径&#xff0c;这里为D:\MSVC Project\SVN_WORK&#xff0c;确保该文件夹为空 右键单击&#xff0c;点击SVN Checkout&#xff0c; 第一行 …

InetAddressImpl#lookupAllHostAddr慢/挂起

自从我升级到优胜美地以来&#xff0c;我已经注意到尝试解析我的家庭网络上的本地主机已经花费了很多时间&#xff08;有时超过一分钟&#xff09;&#xff0c;所以我想我会尝试找出原因。 这是我的初始/ etc / hosts文件的外观&#xff0c;它基于我的机器的主机名是teetotal的…

mysql sqlserver schema_MySQL数据库数据迁移到SQLserver

最近因工作需要&#xff0c;需要将mysql数据库迁移到sqlserver&#xff0c;仅仅是数据迁移&#xff0c;因此相对比较简单。对于mysql迁移到sqlserver&#xff0c;我们需要使用到mysql odbc驱动&#xff0c;然后透过sqlserver链接服务器的方式来访问mysql。具体见下文描述。一、…

mysql客户端安装错误_windows下mysql 5.7以上版本安装及遇到的问题

(原)早些前用window安装mysql挺简单的&#xff0c;一个安装程序&#xff0c;一路下一步。2006的5.0版本&#xff0c;确实太早了点。于是官网上又下了一个版本&#xff0c;windows也是提供了二个版本Installer(安装)版和Archive(文档)版。Installer版本的后缀是.msi&#xff0c;…

SP2010开发和VS2010专家食谱--第二章节--工作流

本章内容&#xff1a; 1. 创建顺序工作流。 2. 创建带有初始表单的网站工作流。 3. 从工作流创建任务。 4. 创建自定义任务表单。 Introduction 根据国际工作流联盟&#xff08;http://www.WFMC.org&#xff09;标准组织&#xff0c;完全致力于流程&#xff0c;这样定义工作流&…

sklearn中eof报错_sklearn中的数据预处理和特征工程

小伙伴们大家好~o(&#xffe3;▽&#xffe3;)ブ&#xff0c;今天我们看一下Sklearn中的数据预处理和特征工程&#xff0c;老规矩还是先强调一下&#xff0c;我的开发环境是Jupyter lab&#xff0c;所用的库和版本大家参考&#xff1a;Python 3.7.1&#xff08;你的版本至少要…