`

SQL语句学习笔记一

阅读更多

主键

主键 (Primary Key) 中的每一笔资料都是表格中的唯一值。换言之,它是用来独一无二地确认一个表格中的每一行资料。主键可以是原本资料内的一个栏位,或是一个人造栏位 (与原本资料没有关系的栏位)。主键可以包含一或多个栏位。当主键包含多个栏位时,称为组合键 (Composite Key)

以下举几个在建置新表格时设定主键的方式:

 

MySQL:

CREATE TABLE Customer

(SID integer,

Last_Name varchar(30),

First_Name varchar(30),

PRIMARY KEY (SID));

 

Oracle:

CREATE TABLE Customer

(SID integer PRIMARY KEY,

Last_Name varchar(30),

First_Name varchar(30));

 

SQL Server:

CREATE TABLE Customer

(SID integer PRIMARY KEY,

Last_Name varchar(30),

First_Name varchar(30));

 

以下则是以改变现有表格架构来设定主键的方式:

 

MySQL:

ALTER TABLE Customer ADD PRIMARY KEY (SID);

 

Oracle:

ALTER TABLE Customer ADD PRIMARY KEY (SID);

 

SQL Server:

ALTER TABLE Customer ADD PRIMARY KEY (SID);

 

请注意,在用ALTER TABLE语句来添加主键之前,我们需要确认被用来当做主键的栏位是设定为 NOT NULL ;也就是说,那个栏位一定不能没有资料。

 

外来键

外来键是一个(或数个)指向另外一个表格主键的栏位。外来键的目的是确定资料的参考完整性(referential integrity)。换言之,只有被准许的资料值才会被存入资料库内。

 

举例来说,假设我们有两个表格:一个 CUSTOMER 表格,里面记录了所有顾客的资料;另一个 ORDERS 表格,里面记录了所有顾客订购的资料。在这里的一个限制,就是所有的订购资料中的顾客,都一定是要跟在 CUSTOMER 表格中存在。在这里,我们就会在 ORDERS 表格中设定一个外来键,而这个外来键是指向 CUSTOMER 表格中的主键。这样一来,我们就可以确定所有在 ORDERS 表格中的顾客都存在 CUSTOMER 表格中。换句话说,ORDERS表格之中,不能有任何顾客是不存在于 CUSTOMER 表格中的资料。

 

这两个表格的结构将会是如下:

 

CUSTOMER 表格 栏位名 性质

SID 主键

Last_Name 

First_Name 

 

 

ORDERS 表格 栏位名 性质

Order_ID 主键

Order_Date 

Customer_SID 外来键

Amount 

 

在以上的例子中,ORDERS 表格中的 customer_SID 栏位是一个指向 CUSTOMERS 表格中 SID 栏位的外来键。

 

以下列出几个在建置 ORDERS 表格时指定外来键的方式:

 

MySQL:

CREATE TABLE ORDERS

(Order_ID integer,

Order_Date date,

Customer_SID integer,

Amount double,

Primary Key (Order_ID),

Foreign Key (Customer_SID) references CUSTOMER(SID));

 

Oracle:

CREATE TABLE ORDERS

(Order_ID integer primary key,

Order_Date date,

Customer_SID integer references CUSTOMER(SID),

Amount double);

 

SQL Server:

CREATE TABLE ORDERS

(Order_ID integer primary key,

Order_Date datetime,

Customer_SID integer references CUSTOMER(SID),

Amount double);

 

以下的例子则是藉着改变表格架构来指定外来键。这里假设 ORDERS 表格已经被建置,而外来键尚未被指定:

 

MySQL:

ALTER TABLE ORDERS

ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(sid);

 

Oracle:

ALTER TABLE ORDERS

ADD (CONSTRAINT fk_orders1) FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(sid);

 

SQL Server:

ALTER TABLE ORDERS

ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(sid);

 

创建表

CREATE TABLE customer

(First_Name char(50),

Last_Name char(50),

Address char(50),

City char(50),

Country char(25),

Birth_Date date)

 

Create table a as select * from  b 可以看做复制表b,表属性没有复制

 

创建视图

CREATE VIEW V_Customer

AS SELECT First_Name, Last_Name, Country

FROM Customer

 

创建索引

CREATE INDEX IDX_CUSTOMER_LAST_NAME

on CUSTOMER (Last_Name)

 

添加字段

ALTER table customer add Gender char(1)

 

修改字段名称

ALTER table customer change Address Addr char(50)

 

修改字段类型

ALTER table customer modify Addr char(30)

 

删除字段

ALTER table customer drop Gender

 

 

常见的SQL函数

AVG (平均)

COUNT (计数)

MAX (最大值)

MIN (最小值)

SUM (总合)

 

字符连接

MySQL: CONCAT()

Oracle: CONCAT(), ||

SQL Server: +

 

截取字符串

MySQL: SUBSTR(), SUBSTRING()

Oracle: SUBSTR()

SQL Server: SUBSTRING()

去掉空格

MySQL: TRIM(), RTRIM(), LTRIM()

Oracle: RTRIM(), LTRIM()

SQL Server: RTRIM(), LTRIM()

 

 

集合操作

INTERSECT

相对与UNION来说,就是两个集合的交集

 

MINUS 

A MINUS B 表示在A集合去掉B集合

 

 

Having子句

HAVING 子句通常是在一个 SQL 句子的最后。一个含有 HAVING 子句的 SQL 并不一定要包含 GROUP BY 子句。HAVING 的语法如下:

SELECT "栏位1", SUM("栏位2")

FROM "表格名"

GROUP BY "栏位1"

HAVING (函数条件) S

 

SELECT store_name, SUM(sales)  FROM Store_Information  GROUP BY store_name  HAVING SUM(sales) > 1500

 

 

DDL语句对数据库对象如表、列和视进行定义。它们并不对表中的行进行处理,这是因为DDL语句并不处理数据库中实际的数据。这些工作由另一类SQL语句数据操作语言(DML)语句进行处理。

 


假设有如下表:


一个为投票主表,一个为投票者信息表~记录投票人IP及对应投票类型,左右连接实际说是我们联合查询的结果以哪个表为准~
1
:如右接连 right join right outer join

我们以右边voter表为准,则左表(voteMaster)中的记录只有当其ID在右边(voter)中存在时才会显示出来,如上图,左边中ID3.4.5.6因为这些ID右表中没有相应记录,所以没有显示!


2
:因此我们自然能理解左连接 left join 或者 left outer join

可见,现在右边中ID在中存在时才会显示,当右边中没有相应数据时则用NULL代替!


3
:全连接 full join 或者 full outer join,为二个表中的数据都出来,这里演示效果与上一样!
4
:内连接 inner join 或者 join;它为返回字段ID同时存在于表voteMaster voter中的记录

5
:交叉连接(完全连接)cross join 不带 where 条件的
没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(table1table2交叉连接产生6*3=18条记录).

等价select vm.id,vm.voteTitle,vt.ip from voteMaster as vm,voter as vt

6:
自连接。

如下表:



这是一个部门表,里面存放了部门及其上级部门,但都放在同一张表中,我们假设现在需要用SQL查询出各部门及其上级部门!就如何做,
当然,不用自连接也一样,可以如下:

我们达到预期目的!在这个查询中使用了一个子查询完成对上级部门名的查询,如果使用自连接,那么结构上感觉会清晰很多。

是不是也同样完成了功能呢,这里除了使用自连接外,还使用了左连接,因为省电力没有上级部门,他是老大,如果使用内连接,就会把这条记录过滤掉,因为没有和他匹配的上级部门。
自连接用的比较多的就是对权形结构的查询!类似上表!

分享到:
评论

相关推荐

    经典sql语句笔记(sql 关键字)

    SQL语句通常由一系列关键字组成,比如`SELECT`、`FROM`、`WHERE`、`ORDER BY`等。基本查询语法通常为: ```sql SELECT column1, column2, ... FROM table_name WHERE condition; ``` 其中,`SELECT`用来指定要查询的...

    SQL语句整理笔记

    ### SQL语句整理笔记知识点详解 #### 数据库操作 1. **创建数据库**: `CREATE DATABASE Country ON (name='Country', filename='D:\Country.mdf', size=5mb, maxsize=100mb, filegrowth=10%) LOG ON (name='...

    SQLserver2008学习笔记

    SQL server 2008

    oracle sql语句学习

    这个"oracle sql语句学习"资源包显然旨在帮助初学者逐步提升到高级水平,通过全面的笔记资料,使用户能够从基础概念到复杂操作都能熟练掌握。 首先,我们从基础开始。SQL,全称Structured Query Language(结构化...

    sql语句+个人笔记

    sql语句中的精华,简单明了,易于学习,对于自学者非常有好处,值得去下载看看

    SQL SERVER学习笔记

    根据提供的文件内容,我们可以整理出一系列关于SQL Server的基础知识点,主要涵盖了数据库的创建与删除、表的创建与修改、数据的插入与更新、以及查询语句等关键操作。下面将详细解析这些知识点。 ### 1. 数据库的...

    sql语句个人学习笔记

    ### SQL语句个人学习笔记 #### 一、创建表、插入数据、查询数据与表连接 **1. 创建表** 在SQL中,我们通常通过`CREATE TABLE`命令来定义一个新的表,并设定表中的各个字段(列)及其属性。在本笔记中,作者创建了...

    java笔记+sql语句

    10. **SQL语句**:SQL(Structured Query Language)是用于管理和处理关系数据库的标准语言。它包括数据查询、数据插入、数据更新和数据删除等操作。在Java中,可以通过JDBC(Java Database Connectivity)API来连接...

    sql语句帮助手册笔记

    ### SQL语句帮助手册笔记 #### 一、SQL基础概念与用法 ##### 1. 数据统计函数 在SQL查询中,经常会用到各种数据统计函数来处理数据集中的数值,例如: - `AVG()`:计算平均值。 - `COUNT()`:计算行数。 - `MAX()`...

    SQL语句练习笔记/文件

    SQL语句练习笔记文件通常包含一系列示例和练习,旨在帮助用户提升SQL技能。这些文件可能包括基本查询、复杂查询、数据操作、数据库设计以及优化技巧等多个方面。下面我们将详细探讨这些知识点。 1. **SQL基础**: ...

    SQL学习笔记(pdf)

    这份"SQL学习笔记"涵盖了SQL的基础概念、语法以及高级特性,是学习数据库管理和数据分析的宝贵资料。 1. **SQL基础** - 数据库概念:了解什么是数据库,它的作用以及数据库管理系统(DBMS)如何工作。 - SQL简介...

    sql server 2005 使用笔记之常用函数和经典sql语句

    这篇笔记主要探讨的是SQL Server 2005中的常用函数以及一些经典的SQL语句,这对于数据库管理员和开发人员来说是非常有价值的知识。 一、SQL Server 2005中的常用函数 1. **聚合函数**:如SUM, COUNT, AVG, MAX, ...

    SQL Server 2008 学习笔记

    比如,你可以使用SQL语句(如CREATE TABLE, ALTER TABLE, DROP TABLE, SELECT等)来实现这些操作。此外,了解索引的使用,特别是在主键上的唯一索引,对于提升查询性能至关重要。主键是标识表中每条记录的唯一标识,...

    day01-sql安装与SQL语句-笔记.zip

    在本压缩包“day01-sql安装与SQL语句-笔记.zip”中,我们可以预见到包含的内容主要是关于SQL(Structured Query Language)的基础知识,包括SQL的安装过程以及基本的SQL语句。SQL是用于管理和处理关系数据库的强大...

    Sqlserver2008--学习笔记(自己总结)

    ### Sqlserver2008 学习笔记精要 #### 第一章 SQL Server 基础 ##### 1. T-SQL 语句基础 - **创建数据库**: 使用 `CREATE DATABASE` 语句来创建一个新的数据库。例如: ```sql CREATE DATABASE 新数据库名; ``...

    sql server学习笔记

    SQL Server 是一种关系数据库管理系统,从事数据库管理的人士可以通过本学习笔记快速了解 SQL Server 的主要特点和知识点。 创建、删除、修改数据库对象 * Create:创建数据库对象,如表、索引、视图等 * Drop:...

    SQL学习全笔记

    存储过程则是预编译的SQL语句集合,可以提高执行效率,并简化重复的操作。 最后,SQL的安全性也非常重要。权限管理(GRANT和REVOKE)确保只有授权的用户可以访问或修改数据。此外,索引的使用可以极大地提高查询...

    SQLServer2005数据库学习笔记

    笔记是本人学习SQLServer一段时间后重新整理出来的,适合有一些入门基础的人学习。 ├─01 安装及使用 │ SQLServer2005安装及使用.txt │ ├─02 常用函数 │ function.sql │ ├─03 建表、建库 │ create.sql ...

    谷粒商城SQL语句文件

    【描述】中提到,这些SQL语句是项目笔记的一部分,可以在CSDN(Chinese Software Developer Network)的特定专栏找到,链接为。这个专栏可能是开发者分享该项目数据库设计、维护或优化经验的地方,对于学习和理解该...

    sql语句学习 多表连接查询

    自己学习的笔记--查询计算机系CS男学生学号、姓名和考试成绩 SELECT A.Sno,A.Sname,B.degree FROM student A,sc B WHERE A.Sdept = 'CS' AND A.Ssex = '男' AND A.Sno = B.sno SELECT A.Sno,A.Sname,B.degree FROM ...

Global site tag (gtag.js) - Google Analytics