❶ sql組合主鍵的欄位值可以為空嗎,可不可以舉個例子來看看啊,本人是sql新手,麻煩教我下
首先回答你的問題,組合主鍵的欄位值不能為空。
不僅是組合主鍵,連單獨的主鍵也不行!
說明一下為什麼:
在所有的資料庫中,關於對主鍵的定義幾乎都是這樣的:
1、不為空
2、唯一
也就是說,只要是主鍵,那麼在該欄位中,所有的欄位值必定都是唯一的,同時也都是不為空的。
而聯合主鍵的約束同樣在,要求兩個欄位值均不為空,同時要求不能有兩對聯合組建的值完全一樣,也就是說,單個欄位值一樣是允許的。
不知道這樣解釋,聽懂沒
❷ SQL 吐血跪求
1.(1)
use 教學庫
go
select * from 學生表 where 性別 = '女' order by 年齡 desc
(2)
select top 1 (select count(*) from 學生表 where 性別 = '女')as 女生 ,(select count(*) from 學生表 where 性別 = '男') as 男生 from 學生表
(3)
update 學生成績表 set 成績 = 60 where 成績>= 50 and 成績 <60
(4)
select 姓名, 學號 from 學生成績表 where 學號 in (select 學號 from 學生成績表 where 成績 < 60)
2.(1)
Create database AAA
GO
Use aaa
GO
Create table books
(商品編號 char(10) not null primary key,
商品名 char(20) not null,
生產商 char(10) not null,
簡介 text null
)
insert into books (商品編號,商品名,生產商) values (』10001』,'洗衣機』,』榮事達』)
insert into books (商品編號,商品名,生產商,簡介) values (』10002』,』電視機』,』長虹』,』35寸液晶』)
❸ sql語句問題
這是個sql語句的基本學習手冊
你可以自己查一下
SQL語句學習手冊實例版
表操作
例 1 對於表的教學管理資料庫中的表 STUDENTS ,可以定義如下:
CREATE TABLE STUDENTS
(SNO NUMERIC (6, 0) NOT NULL
SNAME CHAR (8) NOT NULL
AGE NUMERIC(3,0)
SEX CHAR(2)
BPLACE CHAR(20)
PRIMARY KEY(SNO))
例 2 對於表的教學管理資料庫中的表 ENROLLS ,可以定義如下:
CREATE TABLE ENROLLS
(SNO NUMERIC(6,0) NOT NULL
CNO CHAR(4) NOT NULL
GRADE INT
PRIMARY KEY(SNO,CNO)
FOREIGN KEY(SNO) REFERENCES STUDENTS(SNO)
FOREIGN KEY(CNO) REFERENCES COURSES(CNO)
CHECK ((GRADE IS NULL) OR (GRADE BETWEEN 0 AND 100)))
例 3 根據表的 STUDENTS 表,建立一個只包含學號、姓名、年齡的女學生表。
CREATE TABLE GIRL
AS SELECT SNO, SNAME, AGE
FROM STUDENTS
WHERE SEX=' 女 ';
例 4 刪除教師表 TEACHER 。
DROP TABLE TEACHER
例 5 在教師表中增加住址列。
ALTER TABLE TEACHERS
ADD (ADDR CHAR(50))
例 6 把 STUDENTS 表中的 BPLACE 列刪除,並且把引用 BPLACE 列的所有視圖和約束也一起刪除。
ALTER TABLE STUDENTS
DROP BPLACE CASCADE
例 7 補充定義 ENROLLS 表的主關鍵字。
ALTER TABLE ENROLLS
ADD PRIMARY KEY (SNO,CNO) ;
視圖操作(虛表)
例 9 建立一個只包括教師號、姓名和年齡的視圖 FACULTY 。 ( 在視圖定義中不能包含 ORDER BY 子句 )
CREATE VIEW FACULTY
AS SELECT TNO, TNAME, AGE
FROM TEACHERS
例 10 從學生表、課程表和選課表中產生一個視圖 GRADE_TABLE , 它包括學生姓名、課程名和成績。
CREATE VIEW GRADE_TABLE
AS SELECT SNAME,CNAME,GRADE
FROM STUDENTS,COURSES,ENROLLS
WHERE STUDENTS.SNO = ENROLLS.SNO AND
COURSES.CNO=ENROLLS.CNO
例 11 刪除視圖 GRADE_TABLE
DROP VIEW GRADE_TABLE RESTRICT
索引操作
例 12 在學生表中按學號建立索引。
CREATE UNIQUE INDEX ST
ON STUDENTS (SNO,ASC)
例 13 刪除按學號所建立的索引。
DROP INDEX ST
資料庫模式操作
例 14 創建一個簡易教學資料庫的資料庫模式 TEACHING_DB ,屬主為 ZHANG 。
CREATE SCHEMA TEACHING_DB AUTHRIZATION ZHANG
例 15 刪除簡易教學資料庫模式 TEACHING_DB 。(( 1 )選用 CASCADE ,即當刪除資料庫模式時,則本資料庫模式和其下屬的基本表、視圖、索引等全部被刪除。( 2 )選用 RESTRICT ,即本資料庫模式下屬的基本表、視圖、索引等事先已清除,才能刪除本資料庫模式,否則拒絕刪除。)
DROP SCHEMA TEACHING_DB CASCADE
單表操作
例 16 找出 3 個學分的課程號和課程名。
SELECT CNO, CNAME
FROM COURSES
WHERE CREDIT = 3
例 17 查詢年齡大於 22 歲的學生情況。
SELECT *
FROM STUDENTS
WHERE AGE > 22
例 18 找出籍貫為河北的男生的姓名和年齡。
SELECT SNAME, AGE
FROM STUDENTS
WHERE BPLACE = ' 河北 ' AND SEX = ' 男 '
例 19 找出年齡在 20 ~ 23 歲之間的學生的學號、姓名和年齡,並按年齡升序排序。 (ASC (升序)或 DESC (降序)聲明排序的方式,預設為升序。 )
SELECT SNO, SNAME, AGE
FROM STUDENTS
WHERE AGE BETWEEN 20 AND 23
ORDER BY AGE
例 20 找出年齡小於 23 歲、籍貫是湖南或湖北的學生的姓名和性別。(條件比較運算符=、< 和邏輯運算符 AND (與),此外還可以使用的運算符有:>(大於)、>=(大於等於)、<=(小於等於)、<>(不等於)、 NOT (非)、 OR (或)等。
謂詞 LIKE 只能與字元串聯用,常常是 「 <列名> LIKE pattern」 的格式。特殊字元 「_」 和 「%」 作為通配符。
謂詞 IN 表示指定的屬性應與後面的集合(括弧中的值集或某個查詢子句的結果)中的某個值相匹配,實際上是一系列的 OR (或)的縮寫。謂詞 NOT IN 表示指定的屬性不與後面的集合中的某個值相匹配。
謂詞 BETWEEN 是 「 包含於 … 之中 」 的意思。)
SELECT SNAME, SEX
FROM STUDENTS
WHERE AGE < 23 AND BPLACE LIKE' 湖% '
或
SELECT SNAME, SEX
FROM STUDENTS
WHERE AGE < 23 AND BPLACE IN ( ' 湖南 ' , ' 湖北 ' )
例 22 找出學生表中籍貫是空值的學生的姓名和性別。(在 SQL 中不能使用條件:<列名>= NULL 。在 SQL 中只有一個特殊的查詢條件允許查詢 NULL 值:)
SELECT SNAME, SEX
FROM STUDENTS
WHERE BPLACE IS NULL
多表操作
例 23 找出成績為 95 分的學生的姓名。(子查詢)
SELECT SNAME
FROM STUDENTS
WHERE SNO =
(SELECT SNO
FROM ENROLLS
WHERE GRADE = 95)
例 24 找出成績在 90 分以上的學生的姓名。
SELECT SNAME
FROM STUDENTS
WHERE SNO IN
(SELECT SNO
FROM ENROLLS
WHERE GRADE > 90)
或
SELECT SNAME
FROM STUDENTS
WHERE SNO = ANY
(SELECT SNO
FROM ENROLLS
WHERE GRADE > 90)
例 25 查詢全部學生的學生名和所學課程號及成績。(連接查詢)
SELECT SNAME, CNO, GRADE
FROM STUDENTS, ENROLLS
WHERE STUDENTS.SNO = ENROLLS.SNO
例 26 找出籍貫為山西或河北,成績為 90 分以上的學生的姓名、籍貫和成績。(當構造多表連接查詢命令時,必須遵循兩條規則。第一,連接條件數正好比表數少 1 (若有三個表,就有兩個連接條件 ) ;第二,若一個表中的主關鍵字是由多個列組成,則對此主關鍵字中的每一個列都要有一個連接條件(也有少數例外情況))
SELECT SNAME, BPLACE, GRADE
FROM STUDENTS, ENROLLS
WHERE BPLACE IN (『 山西 ' , 『 河北 ') AND GRADE >= 90 AND STUDENTS.SNO=ENROLLS.SNO
例 28 查出課程成績在 80 分以上的女學生的姓名、課程名和成績。( FROM 子句中的子查詢)
SELECT SNAME,CNAME, GRADE
FROM (SELECT SNAME, CNAME , GRADE
FROM STUDENTS, ENROLLS,COURSES
WHERE SEX = ' 女 ')
AS TEMP (SNAME, CNAME,GRADE)
WHERE GRADE > 80
表達式與函數的使用
例 29 查詢各課程的學時數。(算術表達式由算術運算符+、-、 * 、/與列名或數值常量所組成。)
SELECT CNAME,COURSE_TIME = CREDIT*16
FROM COURSES
例 30 找出教師的最小年齡。(內部函數: SQL 標准中只使用 COUNT 、 SUM 、 AVG 、 MAX 、 MIN 函數,稱之為聚集函數( Set Function )。 COUNT 函數的結果是該列統計值的總數目, SUM 函數求該列統計值之和, AVG 函數求該列統計值之平均值, MAX 函數求該列最大值, MIN 函數求該列最小值。)
SELECT MIN(AGE)
FROM TEACHERS
例 31 統計年齡小於等於 22 歲的學生人數。(統計)
SELECT COUNT(*)
FROM STUDENTS
WHERE AGE < = 22
例 32 找出學生的平均成績和所學課程門數。
SELECT SNO, AVG(GRADE), COURSES = COUNT(*)
FROM ENROLLS
GROUP BY SNO
例 34 找出年齡超過平均年齡的學生姓名。
SELECT SNAME
FROM STUDENTS
WHERE AGE >
(SELECT AVG(AGE)
FROM STUDENTS)
例 35 找出各課程的平均成績,按課程號分組,且只選擇學生超過 3 人的課程的成績。( GROUP BY 與 HAVING
GROUP BY 子句把一個表按某一指定列(或一些列)上的值相等的原則分組,然後再對每組數據進行規定的操作。
GROUP BY 子句總是跟在 WHERE 子句後面,當 WHERE 子句預設時,它跟在 FROM 子句後面。
HAVING 子句常用於在計算出聚集之後對行的查詢進行控制。)
SELECT CNO, AVG(GRADE), STUDENTS = COUNT(*)
FROM ENROLLS
GROUP BY CNO
HAVING COUNT(*) >= 3
相關子查詢
例 37 查詢沒有選任何課程的學生的學號和姓名。(當一個子查詢涉及到一個來自外部查詢的列時,稱為相關子查詢( Correlated Subquery) 。相關子查詢要用到存在測試謂詞 EXISTS 和 NOT EXISTS ,以及 ALL 、 ANY ( SOME )等。)
SELECT SNO, SNAME
FROM STUDENTS
WHERE NOT EXISTS
(SELECT *
FROM ENROLLS
WHERE ENROLLS.SNO=STUDENTS.SNO)
例 38 查詢哪些課程只有男生選讀。
SELECT DISTINCT CNAME
FROM COURSES C
WHERE ' 男 ' = ALL
(SELECT SEX
FROM ENROLLS , STUDENTS
WHERE ENROLLS.SNO=STUDENTS.SNO AND
ENROLLS.CNO=C.CNO)
例 39 要求給出一張學生、籍貫列表,該表中的學生的籍貫省份,也是其他一些學生的籍貫省份。
SELECT SNAME, BPLACE
FROM STUDENTS A
WHERE EXISTS
(SELECT *
FROM STUDENTS B
WHERE A.BPLACE=B.BPLACE AND
A.SNO < > B.SNO)
例 40 找出選修了全部課程的學生的姓名。
本查詢可以改為:查詢這樣一些學生,沒有一門課程是他不選修的。
SELECT SNAME
FROM STUDENTS
WHERE NOT EXISTS
(SELECT *
FROM COURSES
WHERE NOT EXISTS
(SELECT *
FROM ENROLLS
WHERE ENROLLS.SNO = STUDENTS.SNO
AND ENROLLS.CNO = COURSES.CNO))
關系代數運算
例 41 設有某商場工作人員的兩張表:營業員表 SP_SUBORD 和營銷經理表 SP_MGR ,其關系數據模式如下:
SP_SUBORD (SALPERS_ID, SALPERS_NAME, MANAGER_ID, OFFICE)
SP_MGR (SALPERS_ID, SALPERS_NAME, MANAGER_ID, OFFICE)
其中,屬性 SALPERS_ID 為工作人員的編號 , SALPERS_NAME 為工作人員的姓名 , MANAGER_ID 為所在部門經理的編號 , OFFICE 為工作地點。
若查詢全部商場工作人員,可以用下面的 SQL 語句:
(SELECT * FROM SP_SUBORD)
UNION
(SELECT * FROM SP_MGR)
或等價地用下面的 SQL 語句:
SELECT *
FROM (TABLE SP_SUBORD UNION TABLE SP_MGR)
( 2 ) INTERSECT
(SELECT * FROM SP_SUBORD)
INTERSECT
(SELECT * FROM SP_MGR)
或等價地用下面的 SQL 語句:
SELECT *
FROM (TABLE SP_SUBORD INTERSECT TABLE SP_MGR)
或用帶 ALL 的 SQL 語句:
(SELECT * FROM SP_SUBORD)
INTERSECT ALL
(SELECT * FROM SP_MGR)
或
SELECT *
FROM (TABLE SP_SUBORD INTERSECT ALL TABLE SP_MGR)
( 3 ) EXCEPT
(SELECT * FROM SP_MGR)
EXCEPT
(SELECT * FROM SP_SUBORD)
或等價地用下面的 SQL 語句:
SELECT *
FROM (TABLE SP_MGR EXCEPT TABLE SP_ SUBORD)
或用帶 ALL 的 SQL 語句:
(SELECT * FROM SP_MGR)
EXCEPT ALL
(SELECT * FROM SP_SUBORD)
例 42 查詢籍貫為四川、課程成績在 80 分以上的學生信息及其成績。(自然連接)
(SELECT * FROM STUDENTS
WHERE BPLACE=『 四川 ')
NATURAL JOIN
(SELECT * FROM ENROLLS
WHERE GRADE >=80)
例3.43 列出全部教師的姓名及其任課的課程號、班級。
(外連接與外部並外連接允許在結果表中保留非匹配元組,空缺部分填以 NULL 。外連接的作用是在做連接操作時避免丟失信息。
外連接有 3 類:
( 1 )左外連接( Left Outer Join )。連接運算謂詞為 LEFT [OUTER] JOIN ,其結果表中保留左關系的所有元組。
( 2 )右外連接( Right Outer Join )。連接運算謂詞為 RIGHT [OUTER] JOIN ,其結果表中保留右關系的所有元組。
( 3 )全外連接( Full Outer Join )。連接運算謂詞為 FULL [OUTER] JOIN ,其結果表中保留左右兩關系的所有元組。)
SELECT TNAME, CNO, CLASS
FROM TEACHERS LEFT OUTER JOIN TEACHING USING (TNO)
SQL 的數據操縱
例 44 把教師李映雪的記錄加入到教師表 TEACHERS 中。(插入)
INSERT INTO TEACHERS
VALUES(1476 , ' 李映雪 ' , 44 , ' 副教授 ')
例 45 成績優秀的學生將留下當教師。
INSERT INTO TEACHERS (TNO , TNAME)
SELECT DISTINCT SNO , SNAME
FROM STUDENTS , ENROLLS
WHERE STUDENTS.SNO = ENROLLS.SNO AND GRADE >= 90
例 47 把所有學生的年齡增加一歲。(修改)
UPDATE STUDENTS
SET AGE = AGE+1
例 48 學生張春明在資料庫課考試中作弊,該課成績應作零分計。
UPDATE ENROLLS
SET GRADE = 0
WHERE CNO = 'C1' AND
' 張春明 ' =
(SELECT SNAME
FROM STUDENTS
WHERE STUDENTS.SNO=ENROLLS.SNO)
例 49 從教師表中刪除年齡已到 60 歲的退休教師的數據。(刪除)
DELETE FROM TEACHERS
WHERE AGE >= 60
SQL 的數據控制
例 50 授予 LILI 有對表 STUDENTS 的查詢權。(表/視圖特權的授予
一個 SQL 特權允許一個被授權者在給定的資料庫對象上進行特定的操作。授權操作的資料庫對象包括:表 / 視圖、列、域等。授權的操作包括: INSERT 、 UPDATE 、 DELETE 、 SELECT 、 REFERENCES 、 TRIGGER 、 UNDER 、 USAGE 、 EXECUTE 等。其中 INSERT 、 UPDATE 、 DELETE 、 SELECT 、 REFERENCES 、 TRIGGER 有對表做相應操作的許可權,故稱為表特權。)
GRANT SELECT ON STUDENTS
TO LILI
WITH GRANT OPTION
例 51 取消 LILI 的存取 STUDENTS 表的特權。
REVOKE ALL
ON STUDENTS
FROM LILI CASCADE
❹ 用sql語句在選課表中插入所有學生選修8號課程的記錄,成績為空值的語句是什麼
A表a欄位是其主鍵是b表的外鍵,
那b中插入數據的時候 A 中必須有這個欄位。
比如
A 表
學生表
學號 名字
1 yhx
2 ccc
B 表
學生選課表
學號 課程號 分數
在B 表插入數據的時候 學號必須是A 表中的。
❺ SQL中主鍵和外鍵的定義是什麼
關系型資料庫中的一條記錄中有若干個屬性,若其中某一個屬性組(注意是組)能唯一標識一條記錄,該屬性組就可以成為一個主鍵
比如
學生表(學號,姓名,性別,班級)
其中每個學生的學號是唯一的,學號就是一個主鍵
課程表(課程編號,課程名,學分)
其中課程編號是唯一的,課程編號就是一個主鍵
成績表(學號,課程號,成績)
成績表中單一一個屬性無法唯一標識一條記錄,學號和課程號的組合才可以唯一標識一條記錄,所以 學號和課程號的屬性組是一個主鍵
成績表中的學號不是成績表的主鍵,但它和學生表中的學號相對應,並且學生表中的學號是學生表的主鍵,則稱成績表中的學號是學生表的外鍵
同理 成績表中的課程號是課程表的外鍵
定義主鍵和外鍵主要是為了維護關系資料庫的完整性,總結一下:
主鍵是能確定一條記錄的唯一標識,比如,一條記錄包括身份正號,姓名,年齡。身份證號是唯一能確定你這個人的,其他都可能有重復,所以,身份證號是主鍵。
外鍵用於與另一張表的關聯。是能確定另一張表記錄的欄位,用於保持數據的一致性。比如,A表中的一個欄位,是B表的主鍵,那他就可以是A表的外鍵。二、 主鍵、外鍵和索引的區別 收藏主鍵、外鍵和索引的區別?
主鍵
外鍵
索引
定義:
唯一標識一條記錄,不能有重復的,不允許為空
表的外鍵是另一表的主鍵, 外鍵可以有重復的, 可以是空值
該欄位沒有重復值,但可以有一個空值
作用:
用來保證數據完整性
用來和其他表建立聯系用的
是提高查詢排序的速度
個數:
主鍵只能有一個
一個表可以有多個外鍵
一個表可以有多個惟一索引
聚集索引和非聚集索引的區別?
聚集索引一定是唯一索引。但唯一索引不一定是聚集索引。
聚集索引,在索引頁里直接存放數據,而非聚集索引在索引頁里存放的是索引,這些索引指向專門的數據頁的數據。
❻ sql 2005 輸出是空值
id=rs("uname")
sql="update user8 set scip=bcip,scsj=bcsj,bcip='"&ip&"',bcsj='"&now&"' where id="&id&""
conn.execute sql
修改為測試下~
'id=rs("uname") 這句不要了~
sql="update user8 set scip=bcip,scsj=bcsj,bcip='"&ip&"',bcsj='"&now&"' where uname="&username&""
conn.execute sql
❼ sql 如何查詢 空值的欄位
sql查詢空值的欄位寫法:SELECT A.欄位 FROM student A WHERE A.欄位 LIKE'% %' (student為表名)
查詢類似空值的寫法:
1、查詢名稱有退格鍵:select * from t_bd_item_info where charindex(char(8),item_name) > 0 go
2、查詢名稱有製表符tab:select * from t_bd_item_info where charindex(char(9),item_name) > 0 go
3、查詢名稱有換行:select * from t_bd_item_info where charindex(char(10),item_name) > 0 go
4、查詢名稱有回車:select * from t_bd_item_info where charindex(char(13),item_name) > 0 go
5、查詢名稱的空格(前空格、後空格、所有空格):select * from t_bd_item_info where isnull(charindex(' ',item_name),0) > 0go
6、查詢名稱的單引號:select * from t_bd_item_info where charindex(char(39),item_name) > 0 go
7、查詢名稱的雙單引號:select * from t_bd_item_info where charindex(char(34),item_name) > 0 go
(7)sql課程名可以是空值嗎擴展閱讀
1、處理名稱有退格鍵
update t_bd_item_info set item_name = replace(item_name,char(8),'')
where charindex(char(9),item_name) > 0 go
2、處理名稱有製表符tab
update t_bd_item_info set item_name = replace(item_name,char(9),'')
where charindex(char(9),item_name) > 0 go
3、處理名稱有換行
update t_bd_item_info set item_name = replace(item_name,char(10),'')
where charindex(char(10),item_name) > 0 go
4、處理名稱有回車
update t_bd_item_info set item_name = replace(item_name,char(13),'')
where charindex(char(13),item_name) > 0 go
5、處理名稱的空格(前空格、後空格、所有空格)
update t_bd_item_info set item_name = replace(rtrim(ltrim(item_name)),' ','')
where isnull(charindex(' ',item_name),0) > 0go
6、處理名稱的單引號
update t_bd_item_info set item_name = replace(item_name,char(39),'')
where charindex(char(39),item_name) > 0 go
7、處理名稱的雙單引號
update t_bd_item_info set item_name = replace(item_name,char(34),'')
where charindex(char(34),item_name) > 0 go
❽ 用sql語句創建數據表列屬性的時候null和not null都沒寫是允許空值還是不允許空值 如圖
一般關系型資料庫的欄位在不指名not null 的情況下都是允許null值的
❾ SQL創建學生表(Student)、課程表(Course)、班級表(Class)、選課表(XK),寫對的我可以獎勵QB
1,從學生SELECT DISTINCT Sdept;
2,SELECT COUNT(DISTINCT Cpno)
課程
WHERE CNAME ='英語';
3,CREATE TABLE Student2
(SNO CHAR(9)PRIMARY KEY,
SNAME CHAR(20)UNIQUE,
Ssex CHAR(2),
Sbirthday SMALLINT,
Sdept CHAR(20)
);