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