子查询,又叫做嵌套查询。

将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样,被当作结果集的查询语句被称为子查询。

子查询有两种类型:

一种是只返回一个单值的子查询,这时它可以用在一个单值可以使用的地方,这时子查询可以看作是一个拥有返回值的函数;

另外一种是返回一列值的子查询,这时子查询可以看作是一个在内存中临时存在的数据表。

主键

数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY KEY约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。

主键的作用

主键的主要作用如下:

(1)保证实体的完整性;

(2)加快数据库的操作速度;

(3) 在表中添加新记录时,数据库会自动检查新记录的主键值,不允许该值与其他记录的主键值重复;

(4) 数据库自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。

主键具有的特点:唯一性、非空性。

code int primary key,   主键不能为空,不能重复,确保唯一性

code int primary key identity(1,1)     从1开始,每次增长1,添加values时不用添加此列

设置外键:

在要设置外键的表上右键,选择设计,在需要设置外键的列名前右键,如下图:

选择关系单击,出现对话框,单击添加,单击表和列规范后面的省略号,如下图:

在出现的界面做出如下操作:

点击确定,再点击确定,操作成功。

create table xueke
(
code int primary key identity(1,1),
kemu char(10),
tname varchar(10),
age int
)
insert into xueke values('语文','张生',28)
insert into xueke values('数学','张三',29)
insert into xueke values('英语','李四',30)
insert into xueke values('物理','王五',35)
insert into xueke values('化学','王武',40)
insert into xueke values('计算机','马六',45)
insert into xueke values('生物','冯七',50)
insert into xueke values('代数','钱吧',30)
insert into xueke values('体育','如烟',32)
go
create table stu
(
scode int primary key identity(1001,1),
xname varchar(10),
xuanke int
)
insert into stu values('A',5)
insert into stu values('B',2)
insert into stu values('C',3)
insert into stu values('D',6)
insert into stu values('E',9)
insert into stu values('F',7)
insert into stu values('G',1)
insert into stu values('H',4)
insert into stu values('I',3)
insert into stu values('J',8)
insert into stu values('K',5)
go
--张生所教科目及代号
select code, kemu from xueke where tname='张生'
--年龄最小的老师所教的科目及代号
select code,kemu from xueke where age=(select min(age) from xueke)
--学号是1005的学生所选的老师的详细信息
select * from xueke where code=(select xuanke from stu where scode=1005)
--选李四的学生姓名
select xname from stu where xuanke=(select code from xueke where tname='李四')
--选李四的学生人数
select count(*) from stu where xuanke=(select code from xueke where tname='李四')
alter table stu add age int
sp_rename 'stu.age','nl'
update xueke set kemu='数学' where code=8
--比1003年龄小的老师的信息
select * from xueke where age<(select nl from stu where scode=1003)
--李四所教学生里年龄最小的
select *from stu where nl=(select min(nl) from stu where xuanke=(select code from xueke where tname='李四'))
--选数学的学生的信息
select * from stu where xuanke in (select code from xueke where kemu='数学')
--所有学生选择的老师年龄大于35的学生信息
select * from stu where xuanke in (select code from xueke where age>35)

练习

SQL 数据库 子查询、主外键的更多相关文章

  1. 数据库的SQL语句创建和主外键删除操作

    create table UserType ( Id ,), Name nvarchar() not null ) go create table UserInfo ( Id ,), LoginPwd ...

  2. 经典SQL语句大全_主外键_约束

    一.基础(建表.建约束.关系) 约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件(有关数据完整 ...

  3. SQL 数据库 子查询及示例

    子查询,又叫做嵌套查询. 将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样,被当作结果集的查询语句被称为子查询. 子查询有两种类型: 一种是只返回一个单值的子查询,这时它可以用在 ...

  4. sql数据库删除表的外键约束(INSERT 语句与 FOREIGN KEY 约束"XXX"冲突。该冲突发生于数据库"XXX",表"XXX", column 'XXX)

    使用如下SQL语句查询出表中外键约束名称: 1 select name 2 from sys.foreign_key_columns f join sys.objects o on f.constra ...

  5. Oracle数据库添加删除主外键

    (一)添加主键 1.表创建的同时,添加主键约束 语法: create table "表名" ( "列名1" 数据类型及长度 constraint "主 ...

  6. 批量删除MSSQL 中主外键约束

    转自: http://www.maomao365.com/?p=813 在制作 MSSQL同步工具的时候,发现由于主外键的约束,导致数据同步异常,所有我们需要把 读数据库里面的主外键约束,进行批量删除 ...

  7. SQL Server语句创建数据库和表——并设置主外键关系

    简单的创建数据库的 SQL 语句: use master go if exists(select * from sysdatabases where name='Test') begin select ...

  8. 通过SQL脚本来查询SQLServer 中主外键关系

    在SQLServer中主外键是什么,以及主外键如何创建,在这里就不说了,不懂的可以点击这里,这篇文章也是博客园的博友写的,我觉得总结的很好: 此篇文章主要介绍通过SQL脚本来查看Sqlserver中主 ...

  9. C# 数据库dataGridView刷新数据和主外键判断

    本文主要讲诉在使用VS2012+SQL Server数据库做系统中,通常会遇到几个问题.使用dataGridView控件在修改.删除.插入数据后,怎样刷新数据显示操作后的结果.同时在对数据操作时通常会 ...

随机推荐

  1. Peeking into Apache Flink's Engine Room

    http://flink.apache.org/news/2015/03/13/peeking-into-Apache-Flinks-Engine-Room.html   Join Processin ...

  2. java 客户端获取真实ip地址

    在开发工作中,我们常常需要获取客户端的IP.一般获取客户端的IP地址的方法是:request.getRemoteAddr();但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实 ...

  3. 估值十亿美元、1.5亿用户,公司CEO却跑路了

    转载这篇文章是觉得配图非常好玩的,文章的真实性有待证明 年收益3600万美元的.曾经拥有高口碑产品的Evernote,却正在把一手好牌打烂,距离IPO越来越远,屡屡被业界唱衰. "独角兽公司 ...

  4. SQL实现将一个表的数据插入到另外一个表的代码

    --第一种情况的 1>如果2张表的字段一致,并且希望插入全部数据,可以用这种方法: INSERT INTO 目标表 SELECT * FROM 来源表; 2>比如要将 articles 表 ...

  5. 移动web开发--meta 之 viewport

    常用的 viewport meta 如下: 1 <meta name="viewport" content="width=device-width,initial- ...

  6. 为WordPress某个文章添加额外的样式

    如需把css直接写在某文章,把下面代码放如function.php /* 为特定文章添加特定css最简单的方式. */ /*添加自定义CSS的meta box*/ add_action('admin_ ...

  7. httpclient提交json参数

    private void httpReqUrl(List<HongGuTan> list, String url) throws ClientProtocolException, IOEx ...

  8. ArcGIS API for Silverlight 调用GP服务准备---GP模型建立、发布、测试

    原文:ArcGIS API for Silverlight 调用GP服务准备---GP模型建立.发布.测试 第一篇.GP降雨量等值线建模.发布及测试 在水利.气象等行业中,要在WebGIS中实现空间分 ...

  9. AspectJ本质剖析

    AOP一共有两种方式,spring默认使用的是动态代理(JDK自带的动态代理或者使用cglib的动态代理)和静态代理(ASPECTJ) http://blog.csdn.net/zhao9tian/a ...

  10. t-sql中字符串前加N代表什么意思

    比如 select @status = N'stopped' 那么其中的字符串 stopped 前面为什么要加 N 呢?而且我们发现有些地方加 N 与否都没有影响,有些地方又必须加 N. N 在这里表 ...