⑴ SQL数据库中表与表之间的关联怎么建立
1、在数据库窗口中,单击“创建”中“表格”中的“表设计”,打开表设计窗口。
⑵ 数据库创建selectcourse
建立的具体步骤如下:
第一条语句在Student表根据学号升序建立索引Stusno;第二条语句在Course表根据课程号升序建立索引Coucno;第三条语句在SC表先根据学号升序排列,(选课表一个学生可能选了多个课程)在学号相同的情况下,课程号降序排列,建立索引。
这时一个完整的数据表就建立好了,可以在数据表离输入和查询,筛选数据。
⑶ sqlserver 下怎么建立数据库 怎么建表
SQL Server下建立数据库、建表的方法:
1、首先打开SQL Server Management Studio,会看到如下的界面:
在里面输入需要的值就可以。
⑷ sql数据库 建立三个表 student(学号 姓名 性别) sc(学号 课程号 成绩)course(课程号 课程名 分数 )
select 姓名,savg from (select 学号,avg(成绩)as savg from sc where 成绩<60 group by 学号 having count(学号)>=2) t1,student where t1.学号=student.学号
1. Group By 语句简介:
Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。 2. Group By 的使用: 上面已经给出了对Group By语句的理解。基于这个理解和SQL Server 2000的联机帮助,下面对Group By语句的各种典型使用进行依次列举说明。 2.1 Group By [Expressions]: 这个恐怕是Group By语句最常见的用法了,Group By + [分组字段](可以有多个)。在执行了这个操作以后,数据集将根据分组字段的值将一个数据集划分成各个不同的小组。比如有如下数据集,其中水果名称(FruitName)和出产国家(ProctPlace)为联合主键: FruitName ProctPlace Price
Apple China $1.1
Apple Japan $2.1
Apple USA $2.5
Orange China $0.8
Banana China $3.1
Peach USA $3.0
如果我们想知道每个国家有多少种水果,那么我们可以通过如下SQL语句来完成: SELECT COUNT(*) AS 水果种类, ProctPlace AS 出产国 FROM T_TEST_FRUITINFO GROUP BY ProctPlace 这个SQL语句就是使用了Group By + 分组字段的方式,那么这句SQL语句就可以解释成“我按照出产国家(ProctPlace)将数据集进行分组,然后分别按照各个组来统计各自的记录数量。”很好理解对吧。这里值得注意的是结果集中有两个返回字段,一个是ProctPlace(出产国), 一个是水果种类。如果我们这里水果种类不是用Count(*),而是类似如下写法的话: SELECT FruitName, ProctPlace FROM T_TEST_FRUITINFO GROUP BY ProctPlace 那么SQL在执行此语句的时候会报如下的类似错误: 选择列表中的列 'T_TEST_FRUITINFO.FruitName' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。 这就是我们需要注意的一点,如果在返回集字段中,这些字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。我们可以将Group By操作想象成如下的一个过程,首先系统根据SELECT 语句得到一个结果集,如最开始的那个水果、出产国家、单价的一个详细表。然后根据分组字段,将具有相同分组字段的记录归并成了一条记录。这个时候剩下的那些不存在于Group By语句后面作为分组依据的字段就有可能出现多个值,但是目前一种分组情况只有一条记录,一个数据格是无法放入多个数值的,所以这里就需要通过一定的处理将这些多值的列转化成单值,然后将其放在对应的数据格中,那么完成这个步骤的就是聚合函数。这就是为什么这些函数叫聚合函数(aggregate functions)了。 2.2 Group By All [expressions] : Group By All + 分组字段, 这个和前面提到的Group By [Expressions]的形式多了一个关键字ALL。这个关键字只有在使用了where语句的,且where条件筛选掉了一些组的情况才可以看出效果。在SQL Server 2000的联机帮助中,对于Group By All是这样进行描述的: 如果使用 ALL 关键字,那么查询结果将包括由 GROUP BY 子句产生的所有组,即使某些组没有符合搜索条件的行。没有 ALL 关键字,包含 GROUP BY 子句的 SELECT 语句将不显示没有符合条件的行的组。 其中有这么一句话“如果使用ALL关键字,那么查询结果将包含由Group By子句产生的所有组...没有ALL关键字,那么不显示不符合条件的行组。”这句话听起来好像挺耳熟的,对了,好像和LEFT JOIN 和 RIGHT JOIN 有点像。其实这里是类比LEFT JOIN来进行理解的。还是基于如下这样一个数据集: FruitName ProctPlace Price
Apple China $1.1
Apple Japan $2.1
Apple USA $2.5
Orange China $0.8
Banana China $3.1
Peach USA $3.0
首先我们不使用带ALL关键字的Group By语句: SELECT COUNT(*) AS 水果种类, ProctPlace AS 出产国 FROM T_TEST_FRUITINFO WHERE (ProctPlace <> 'Japan') GROUP BY ProctPlace 那么在最后结果中由于Japan不符合where语句,所以分组结果中将不会出现Japan。 现在我们加入ALL关键字: SELECT COUNT(*) AS 水果种类, ProctPlace AS 出产国 FROM T_TEST_FRUITINFO WHERE (ProctPlace <> 'Japan') GROUP BY ALL ProctPlace 重新运行后,我们可以看到Japan的分组,但是对应的“水果种类”不会进行真正的统计,聚合函数会根据返回值的类型用默认值0或者NULL来代替聚合函数的返回值。 2.3 GROUP BY [Expressions] WITH CUBE | ROLLUP: 首先需要说明的是Group By All 语句是不能和CUBE 和 ROLLUP 关键字一起使用的。 首先先说说CUBE关键字,以下是SQL Server 2000联机帮助中的说明: 指定在结果集内不仅包含由 GROUP BY 提供的正常行,还包含汇总行。在结果集内返回每个可能的组和子组组合的 GROUP BY 汇总行。GROUP BY 汇总行在结果中显示为 NULL,但可用来表示所有值。使用 GROUPING 函数确定结果集内的空值是否是 GROUP BY 汇总值。 结果集内的汇总行数取决于 GROUP BY 子句内包含的列数。GROUP BY 子句中的每个操作数(列)绑定在分组 NULL 下,并且分组适用于所有其它操作数(列)。由于 CUBE 返回每个可能的组和子组组合,因此不论指定分组列时所使用的是什么顺序,行数都相同。 我们通常的Group By语句是按照其后所跟的所有字段进行分组,而如果加入了CUBE关键字以后,那么系统将根据所有字段进行分组的基础上,还会通过对所有这些分组字段所有可能存在的组合形成的分组条件进行分组计算。由于上面举的例子过于简单,这里就再适合了,现在我们的数据集将换一个场景,一个表中包含人员的基本信息:员工所在的部门编号(C_EMPLINFO_DEPTID)、员工性别(C_EMPLINFO_SEX)、员工姓名(C_EMPLINFO_NAME)等。那么我现在想知道每个部门各个性别的人数,那么我们可以通过如下语句得到: SELECT C_EMPLINFO_DEPTID, C_EMPLINFO_SEX, COUNT(*) AS C_EMPLINFO_TOTALSTAFFNUM FROM T_PERSONNEL_EMPLINFO GROUP BY C_EMPLINFO_DEPTID, C_EMPLINFO_SEX 但是如果我现在希望知道: 1. 所有部门有多少人(这里相当于就不进行分组了,因为这里已经对员工的部门和性别没有做任何限制了,但是这的确也是一种分组条件的组合方式); 2. 每种性别有多人(这里实际上是仅仅根据性别(C_EMPLINFO_SEX)进行分组); 3. 每个部门有多少人(这里仅仅是根据部门(C_EMPLINFO_DEPTID)进行分组);那么我们就可以使用ROLLUP语句了。 SELECT C_EMPLINFO_DEPTID, C_EMPLINFO_SEX, COUNT(*) AS C_EMPLINFO_TOTALSTAFFNUM FROM T_PERSONNEL_EMPLINFO GROUP BY C_EMPLINFO_DEPTID, C_EMPLINFO_SEX WITH CUBE 那么这里你可以看到结果集中多出了很多行,而且结果集中的某一个字段或者多个字段、甚至全部的字段都为NULL,请仔细看一下你就会发现实际上这些记录就是完成了上面我所列举的所有统计数据的展现。使用过SQL Server 2005或者RDLC的朋友们一定对于矩阵的小计和分组功能有印象吧,是不是都可以通过这个得到答案。我想RDLC中对于分组和小计的计算就是通过Group By的CUBE和ROLLUP关键字来实现的。(个人意见,未证实) CUBE关键字还有一个极为相似的兄弟ROLLUP, 同样我们先从这英文入手,ROLL UP是“向上卷”的意思,如果说CUBE的组合是绝对自由的,那么ROLLUP的组合就需要有点约束了。我们先来看看SQL Server 2000的联机中对ROLLUP关键字的定义: 指定在结果集内不仅包含由 GROUP BY 提供的正常行,还包含汇总行。按层次结构顺序,从组内的最低级别到最高级别汇总组。组的层次结构取决于指定分组列时所使用的顺序。更改分组列的顺序会影响在结果集内生成的行数。 那么这个顺序是什么呢?对了就是Group By 后面字段的顺序,排在靠近Group By的分组字段的级别高,然后是依次递减。如:Group By Column1, Column2, Column3。那么分组级别从高到低的顺序是:Column1 > Column2 > Column3。还是看我们前面的例子,SQL语句中我们仅仅将CUBE关键字替换成ROLLUP关键字,如: SELECT C_EMPLINFO_DEPTID, C_EMPLINFO_SEX, COUNT(*) AS C_EMPLINFO_TOTALSTAFFNUM FROM T_PERSONNEL_EMPLINFO GROUP BY C_EMPLINFO_DEPTID, C_EMPLINFO_SEX WITH ROLLUP 和CUBE相比,返回的数据行数减少了不少。:),仔细看一下,除了正常的Group By语句后,数据中还包含了: 1. 部门员工数;(向上卷了一次,这次先去掉了员工性别的分组限制) 2. 所有部门员工数;(向上又卷了依次,这次去掉了员工所在部门的分组限制)。 在现实的应用中,对于报表的一些统计功能是很有帮助的。 这里还有一个问题需要补充说明一下,如果我们使用ROLLUP或者CUBE关键字,那么将产生一些小计的行,这些行中被剔除在分组因素之外的字段将会被设置为NULL,那么还存在一种情况,比如在作为分组依据的列表中存在可空的行,那么NULL也会被作为一个分组表示出来,所以这里我们就不能仅仅通过NULL来判断是不是小计记录了。下面的例子展示了这里说得到的情况。还是我们前面提到的水果例子,现在我们在每种商品后面增加一个“折扣列”(Discount),用于显示对应商品的折扣,这个数值是可空的,也就是可以通过NULL来表示没有对应的折扣信息。数据集如下所示: FruitName ProctPlace Price Discount
Apple China $1.1 0.8
Apple Japan $2.1 0.9
Apple USA $2.5 1.0
Orange China $0.8 NULL
Banana China $3.1 NULL
Peach USA $3.0 NULL
现在我们要统计“各种折扣对应有多少种商品,并总计商品的总数。”,那么我们可以通过如下的SQL语句来完成: SELECT COUNT(*) AS ProctCount, Discount FROM T_TEST_FRUITINFO GROUP BY Discount WITH ROLLUP 好了,运行一下,你会发现数据都正常出来了,按照如上的数据集,结果如下所示: ProctCount Discount
3 NULL
1 0.8
1 0.9
1 1.0
6 NULL
好了,各种折扣的商品数量都出来了,但是在显示“没有折扣商品”和“商品小计”的时候判断上确存在问题,因为存在两条Discount为Null的记录。是哪一条呢?通过分析数据我们知道第一条数据(3, Null)应该对应没有折扣商品的数量,而(6,Null)应该对应所有商品的数量。需要判断这两个具有不同意义的Null就需要引入一个聚合函数Grouping。现在我们把语句修改一下,在返回值中使用Grouping函数增加一列返回值,SQL语句如下: SELECT COUNT(*) AS ProctCount, Discount, GROUPING(Discount) AS Expr1 FROM T_TEST_FRUITINFO GROUP BY Discount WITH ROLLUP 这个时候,我们再看看运行的结果: ProctCount Discount Expr1
3 NULL 0
1 0.8 0
1 0.9 0
1 1.0 0
6 NULL 1
对于根据指定字段Grouping中包含的字段进行小计的记录,这里会标记为1,我们就可以通过这个标记值将小计记录从判断那些由于ROLLUP或者CUBE关键字产生的行。Grouping(column_name)可以带一个参数,Grouping就会去判断对应的字段值的NULL是否是由ROLLUP或者CUBE产生的特殊NULL值,如果是那么就在由Grouping聚合函数产生的新列中将值设置为1。注意Grouping只会检查Column_name对应的NULL来决定是否将值设置为1,而不是完全由此列是否是由ROLLUP或者CUBE关键字自动添加来决定的。 2.2 Group By 和 Having, Where ,Order by语句的执行顺序: 最后要说明一下的Group By, Having, Where, Order by几个语句的执行顺序。一个SQL语句往往会产生多个临时视图,那么这些关键字的执行顺序就非常重要了,因为你必须了解这个关键字是在对应视图形成前的字段进行操作还是对形成的临时视图进行操作,这个问题在使用了别名的视图尤其重要。以上列举的关键字是按照如下顺序进行执行的:Where, Group By, Having, Order by。首先where将最原始记录中不满足条件的记录删除(所以应该在where语句中尽量的将不符合条件的记录筛选掉,这样可以减少分组的次数),然后通过Group By关键字后面指定的分组条件将筛选得到的视图进行分组,接着系统根据Having关键字后面指定的筛选条件,将分组视图后不满足条件的记录筛选掉,然后按照Order By语句对视图进行排序,这样最终的结果就产生了。在这四个关键字中,只有在Order By语句中才可以使用最终视图的列名,如: SELECT FruitName, ProctPlace, Price, ID AS IDE, Discount FROM T_TEST_FRUITINFO WHERE (ProctPlace = N'china') ORDER BY IDE 这里只有在ORDER BY语句中才可以使用IDE,其他条件语句中如果需要引用列名则只能使用ID,而不能使用IDE。
⑸ 如何在数据库中创建选课SC表
先创建需要外键参照的两个主表(学生)主键学号,(课程)主键课号。
然后创建选课表SC,学号和课号联合作主键,分别作外键。
create table sc(学号 char(6),课号 char(6),成绩 int,primary key (学号,课号),foreign key (学号)references 学生(学号),foreign key (课号)references 课程(课号))
⑹ 怎么在SQL数据库中新建表。
依次点击开始-->输入cmd-->点击确定
⑺ 用sql语句创建student,course,sc表.
create table student
(
id int Not Null,
studentnumber varchar(22),
name id int Not Null,
`````
)
craete table course
(
`````
)
craete table sc
(
``````
)
⑻ 怎样建立数据库表格
我当年的笔记,都给你吧。x0dx0ax0dx0a一、 建立数据库x0dx0a方法一:使用向导,调出方法⑴可采用“文件”菜单“新建”x0dx0a ⑵或采用“工具”菜单“向导”x0dx0a方法二:使用数据库设计器x0dx0a1、 使用向导建立数据库x0dx0a特点:可以方便快捷地创建数据库,但只适用于一般常用的数据库。x0dx0a2、 使用数据库设计器建立数据库x0dx0a特点: 最大特点就是灵活性x0dx0a操作步骤:⑴“文件”菜单“新建”,显示新建对话框x0dx0a ⑵选择“数据库”和单击“新建文件”钮x0dx0a ⑶在创建对话框中输入新数据库的名称和单击“保存”钮x0dx0a 效果:数据库文件已经建立完成。x0dx0a 显示出“数据库设计器”窗口和“数据库设计工具”x0dx0a 打开“数据库设计器”工具方法:“显示”菜单“工具栏” x0dx0a 选择“数据库设计器” x0dx0a三、建立表x0dx0a1、 数据库与数据表x0dx0a可以先建立自由表,然后再添加到数据库中x0dx0a建立新的数据库表,系统会将其自动加入到数据库中。x0dx0a2、 建立自由表x0dx0a 注意:自由表独立于任何数据库,如需要课添加到数据库中,但不能同时 x0dx0a 将一个表添加到多个数据库。x0dx0a 预备知识:建立表必须首先建立表的结构x0dx0a 即要描述各个字段的字段名、字段类型、字段宽度、如果是数x0dx0a 值型还有小数位数,以及索引、是否再字段中允许空值(选择NULL)x0dx0a x0dx0a3、 建立数据库表x0dx0a有三种方法: x0dx0a法一、“文件”菜单“新建”,显示新建对话框x0dx0a 选择“表”和单击“新建文件”钮x0dx0a 在创建对话框中输入新数表名称和单击“保存”钮x0dx0a 法二、再建立完数据库后,不关闭“数据库设计器”窗口,单击鼠标右键后x0dx0a 选择快捷菜单种的“新表”,单击“新表”钮,再创建对话框输入表 名 x0dx0a 后“保存”x0dx0a 法三、使用数据库设计器工具栏x0dx0a (“显示”菜单“工具栏”)x0dx0a 选择“数据库设计器”工具栏种的第一个钮“新建表”x0dx0a x0dx0a二、使用命令建立数据库、数据库表x0dx0a1、 建立数据库x0dx0aCREATE DATABASE 数据库名称x0dx0a2、 建立数据库表x0dx0aCREATE TABLE │DBF 表名 [FREE]x0dx0a (字段名1 字段类型 [(字段宽度 [,小数位数] )]x0dx0a [(字段名2??]x0dx0ax0dx0a二、使用向导建立查询x0dx0a 1、查询形式分类:查询向导:标准查询x0dx0a 交叉表向导:以电子表格形式输出查询结果x0dx0a 图形向导:以电子图形形式输出查询结果x0dx0a 2、使用查询向导建立查询步骤:x0dx0a [0]使用查询向导前必须先打开用到的库表或自由表x0dx0a ⑴字段选取x0dx0a ⑵记录筛选x0dx0a ⑶选择排序方式x0dx0a ⑷查询完成(选择保存并运行)(浏览查询)x0dx0a ⑸打开查询设计器,修改查询
⑼ SQL数据库怎么创建表.
CREATE TABLE [dbo].[student](
[学号] [CHAR](8) NOT NULL,
[姓名] [CHAR](8) NULL,
[性别] [CHAR](2) NULL,
[年龄] [INT] NULL,
[联系方式] [CHAR](11) NULL,
[所在院系] [CHAR](20) NULL,
CONSTRAINT [PK_student] PRIMARY KEY CLUSTERED
(
[学号] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[student] WITH CHECK ADD CONSTRAINT [CK_student] CHECK (([性别]='女' OR [性别]='男'))
GO
ALTER TABLE [dbo].[student] CHECK CONSTRAINT [CK_student]
GO
ALTER TABLE [dbo].[student] WITH CHECK ADD CONSTRAINT [CK_student_1] CHECK (([联系方式] LIKE '[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'))
GO
ALTER TABLE [dbo].[student] CHECK CONSTRAINT [CK_student_1]
GO
ALTER TABLE [dbo].[student] ADD CONSTRAINT [DF_student_所在院系] DEFAULT ('电信系') FOR [所在院系]
GO
⑽ SQL数据库怎么样用命令建库及表,还有怎么样建立表之间的联系
create database student charset=utf8;
use student;
create table S(
s_id int primary key,
name varchar(20),
sex char(2),
brith datetime,
department varchar(20)
);
create table C(
c_id int primary key,
course varchar(20),
class_hour int
);
create table SC(
s_id int,
c_id int,
score int
);
SC表是中间表,多对多的关系,一个学生可以选修多门课程,一个课程可以被多个学生选修
建立外键,但是真实的系统当中可以不建立外键,只建立主键,只在查表当中关联查询键
alter table SC constraint FK_sID foreign key(s_id) references S(s_id); 中间表外键引用主表的主键
alter table SC constraint FK_cID foreign key(c_id) references C(c_id);
表关联查询 某某同学,某某课程,分数是多少
select S.name , C.course , SC.score
from S , C , SC
where S.s_id=SC.s_id and C.c_id=SC.c_id;