数据库系列(5):SQL查询
SQL (Structured Query Language:结构化查询语言) 是用来访问和操作数据库系统的,是一门ANSI 的标准计算机语言。目前最为广泛使用的数据库查询语言就是SQL了,尽管我么说SQL语言是一种“查询语言”,但是处理数据库查询,它还具有很多其他功能,可以定义数据结构,数据插入、更新和删除,以及数据访问控制等。
历史
SQL最早的版本由IBM开发,最初叫Sequel,后来更名为SQL(结构化查询语言),因为有很多的产品都支持SQL语言,所以需要为它制定一套标准,大家都按照标准做事。于是出现了SQL-86,SQL-2003,SQL-2011这些标准参考文献。
SQL的组成
数据定义语言(DDL,DATE DEFINITION LANGUAGE),DDL定义修改/删除关系模式的命令,用来定义数据库机构或者schema。DDL不仅能定义一组关系,还能定义属性的类型,索引集合,物理存储结构等。
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
数据操纵语言(DML,DATA MANIPULATION LANGUAGE),DML提供从数据库中查询信息,以及增加/修改/删除记录的命令。
SELECT - 从数据库表中获取数据
UPDATE - 更新数据库表中的数据
DELETE - 从数据库表中删除数据
INSERT INTO - 向数据库表中插入数据
数据控制语言(DCL,DCL-DATA CONTROL LANGUAGE),DCL用来授予或回收访问数据库的某种特权。
GRANT-允许用户访问数据库的权限
DENY-在安全系统中创建一项,以拒绝给当前数据库内的安全帐户授予权限并防止安全帐户通过其组或角色成员资格继承权限
REVOKE-撤消使用GRANT命令给出的用户访问权限
务控制语言 (TCL-TRANSACTION CONTROL LANGUAGE),TCL用来管理DML语句造成的变化。
SET TRANSACTIION-指定事务的特征
ROLLBACK-在发生任何错误的情况下回滚事务
COMMIT-提交事务
SAVEPOINT - 回滚在组内创建点的事务
SQL查询
SQL查询的基本结构有3个子句构成:select、from和where。
from子句列出的关系(集合)作为输入,然后在from子句列出的这些关系(集合)上进行where和select子句的指定运算,然后产出一个关系(集合)作为结果,称为结果集。
select子句:列出查询集合中所需要的属性(不是所有的属性都是这次查询所需要的)
from子句:要得到查询集合必须要访问的关系列表
where子句:是一个作用在from子句中的关系属性上的谓词
一个典型的SQL查询具有以下形式:
select A1, A2, A3, ...., An
from r1, r2, r3, ..., rn,
where P;
每个An代表一个属性,每个rn代表一个关系,P是筛选条件,如果省略了where子句,则P为true。
如:
select name from ad;
结果就是由属性名是name的单个属性构成的关系。
select id, name from ad;
结果就是由属性名是id和name2个属性构成的关系。
在关系模型的形式化数学定义中,关系是一个集合,理论上集合中的元素不应该是重复的。但是在实践中,去除重复相当的耗时,所以SQL允许结果中出现重复,如果我们想强制去除重复,我们可以在select后加上关键词distinct
select distinct name from ad;
AS子句(别名)
- 别名可以为表名称或列名称提供临时名称。
- 别名可使 表名 或 列名 更具可读性。
- 别名只存在于查询期间。
SQL查询嵌套
我们知道,SQL查询的结果是一个集合,SQL的from子句后面也跟着集合,那from子句能不能跟着 一个SQL查询结果呢?答案是可以的。
但是 from 子句后面跟的是一个显性关系,需要制定关系名称,同时SQL查询的结果可以理解为一个匿名的集合,那我们如何才能对这个结果二次使用呢?
我们知道使用AS可以为表(集合、关系)提供一个别名,这样在一个查询中我们就可以显性的把这个结果作为from 子句的内容。
select ID from (select * from core_org) as a;
(select * from core_org) 作为一个集合,同时给予别名a,然后把a 作为from子句的内容,从这个输入源中选择ID属性,最后得到只有一个ID属性的关系集合。
提示
尽管语法上需要以select、from、where的顺序写出,
但是首先from,然后where,最后select理解上可能会更顺点。
首先指定数据源,然后指定筛选条件,然后选出所需数据(从数据源中选出自己需要的内容)。
select id from core_org where core_org.id = 1;select org.id from core_org as org where org.id = 1;select id from core_org as org where org.id = 1;#以上3种写法,效果是一样的select id from core_org as org where core_org.id = 1;
# as使原始的core_org 不再有效,这种写法会报Unknown column 'core_org.id' 错误
数据库系列(5):SQL查询相关推荐
- kettle 查询数据库写入文件_怎么连接数据库-详解如何用kettle连接mysql数据库并导出sql查询结果...
概述 今天主要介绍下kettle怎么去连接mysql数据库及导出sql查询结果. 1.数据库链接驱动 如果没有安装对应的数据库驱动,在数据库连接的过程中,可能会报某个数据库连接找不到的异常,因此需要下 ...
- 数据库实验三 SQL查询数据
实验三 SQL查询数据 实验目的 熟练掌握使用SQL查询语言.完成各类查询操作(单表查询,连接查询,嵌套查询,集合查询). 实验内容 现有一个单位内部的小型图书借阅系统,假设每本图书的数量无限制,并且 ...
- 数据库 实验二 SQL查询一
SQL查询一 答案链接链接 实验学时:2 实验类型:验证 实验要求:必修 一.实验目的 通过本实验使学生掌握单表查询并初步掌握多表查询的技能. 二.实验内容 使用实验一建立的银行贷款数据库和表,完成以 ...
- IDEA连接MySQL数据库并执行SQL查询操作
打开IDEA后,新建一个项目或者在已有项目上均可操作!!! 1 打开数据库页面 1.1 方式一 在主页面工具栏上找到View(视图)-Tool Windows(工具窗口)-Database(数据库), ...
- mysql数据库在什么上运行_mysql – 在所有数据库上运行SQL查询
我有一个使用cPanel和phpmyadmin的托管帐户. 我在此帐户下有50个数据库,所有WordPress. 我需要修改此查询,以便它运行所有数据库以更新密码. UPDATE 'wp_users' ...
- python查询sqlserver视图_如题:sqlserver连接Oracle数据库,在sql查询分析器中查询oracle中的视图,根据时间字段查询,SQL语句...
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- 查询中接受的主体参数_【自动化/测开面试集锦系列】SQL查询
前言 select top n 形式的语句可以获取查询的前几个记录,但是 mysql没有此语法,mysql用limit来实现相关功能. LIMIT子句可以被用于强制 SELECT 语句返回指定的记录数 ...
- mysql筛选两个表有相同项的数据库_用SQL查询两个表中相同的数据
展开全部 1.创建测试表: create table test_col_1(id number, var varchar2(200)); create table test_col_2(id numb ...
- mysql产品型号_三:MySQL系列之SQL查询
INSERT INTO `areas` VALUES ('110000', '北京市', NULL);INSERT INTO `areas` VALUES ('110100', '北京市', '110 ...
- Entity Framework Core系列教程-23-原生SQL查询
在Entity Framework Core中执行原生SQL查询 Entity Framework Core提供了DbSet.FromSql()方法来对基础数据库执行原始SQL查询,并将结果作为实体对 ...
最新文章
- python——元素列表基础
- 2.12日递推专题第一题
- Java线程池的工作原理与实现
- Weblogic常用监控指标
- 计算机科学 —— 时间戳(timestamp)
- Chromium引擎控件DotNetBrowser V1.14发布 | 附下载
- 智能优化算法:果蝇优化算法-附代码
- 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_9 Mybatis中的返回值深入-解决实体类属性和数据库列名不对应的两种方式...
- /etc/init.crs enable\disable 状态
- 使用OTDR进行双向光纤测试
- 淘宝数据分析必须知道的15个核心问题
- WDF驱动中访问 PCI 设备配置空间
- 【数据结构与算法-动态规划系列经典例题汇总】
- java中国象棋兵吃棋规则_国际象棋规则兵的吃法
- C++ inheritance examples
- 中国传媒大学计算机课程表,课 程 表 - 中国传媒大学
- TXS0102使用说明
- 推荐系统概述推荐系统算法简介
- 烟草专卖生产企业许可证
- where 空集_空集是任何非空集合的真子集。( )