VF第6章sql查詢語言
《VF第6章sql查詢語言》由會(huì)員分享,可在線閱讀,更多相關(guān)《VF第6章sql查詢語言(56頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第 六 章 SQL查 詢 語 言 的 使 用 學(xué) 習(xí) 目 標(biāo) :( 1) 了 解 SQL的 基 本 知 識(shí)( 2) 掌 握 SQL的 數(shù) 據(jù) 查 詢 操 作( 3) 熟 悉 SQL的 數(shù) 據(jù) 定 義 功 能( 4) 熟 悉 SQL的 數(shù) 據(jù) 操 縱 功 能 6.1 SQL 基 礎(chǔ) 知 識(shí) SQL( Structured Query Language) 結(jié) 構(gòu) 化 查詢 語 言 , 是 一 種 介 于 關(guān) 系 代 數(shù) 與 關(guān) 系 運(yùn) 算 之 間 的語 言 。 SQL語 言 動(dòng) 詞SQL功 能 動(dòng) 詞數(shù) 據(jù) 查 詢 select數(shù) 據(jù) 定 義 creat, drop, alter數(shù) 據(jù) 操 縱 i
2、nsert, update, delete數(shù) 據(jù) 控 制 grant, revoke 6.2 SQL 的 數(shù) 據(jù) 定 義 功 能一 、 創(chuàng) 建 表格 式 1: CREATE TABLE FREE ( 類 型 (長 度 ) , 類 型 (長 度 ) )功 能 : 創(chuàng) 建 一 個(gè) 以 為 表 的 名 字 , 以 指 定的 字 段 屬 性 定 義 數(shù) 據(jù) 表 。說 明 : 定 義 表 的 各 個(gè) 屬 性 時(shí) , 需 要 指 明 其 數(shù) 據(jù)類 型 及 長 度 。 例 1: 創(chuàng) 建 新 表 stu2, 其 結(jié) 構(gòu) 和 學(xué) 生 表 相 同 。 creat table stu2(學(xué) 號(hào) C(8), 姓 名
3、C(8), 性 別 C(2), 出 生 日 期 D, 入 校 總 分 N(3, 0), 三 好生 L, 特 長 M, 照 片 G)格 式 2: CREATE TABLE FREE ( 類 型 (長 度 ) , 類 型 (長 度 ) ) NULL|NOT NULLCHECK ERROR提 示 信 息 DEFAULT FREE: 說 明 定 義 的 表 是 自 由 表 。NULL: 允 許 一 個(gè) 字 段 為 空 值 。 如 果 一 個(gè) 或 多 個(gè) 字段 允 許 包 含 空 值 , 一 個(gè) 表 最 多 可 以 定 義 254個(gè) 字 段 。NOT NULL: 不 允 許 字 段 為 空 值 , 即
4、字 段 必 須 取一 個(gè) 具 體 的 值 。CHECK : 定 義 字 段 級(jí) 的 有 效 性 規(guī) 則 。是 邏 輯 型 表 達(dá) 式 。 ERROR 提 示 信 息 : 定 義 字 段 的 錯(cuò) 誤 信 息 。 當(dāng)字 段 中 的 數(shù) 據(jù) 違 背 了 字 段 的 完 整 性 約 束 條 件 時(shí) ,Visual FoxPro就 會(huì) 顯 示 “ 提 示 信 息 ” 定 義 的 出錯(cuò) 信 息 。DEFAULT : 定 義 字 段 的 默 認(rèn) 值 , 的 數(shù) 據(jù) 類 型 必 須 和 字 段 類 型 一 致 。 例 2: 在 數(shù) 據(jù) 庫 xsgl.DBC中 , 使 用 命 令 建 立“ jsj.DBF” 表
5、 , 表 結(jié) 構(gòu) 包 括 (學(xué) 號(hào) C(8),姓 名 C(6),筆 試 N(5,1),上 機(jī) N(5,1), 并 設(shè) 置 學(xué) 號(hào)為 主 索 引 , 筆 試 和 上 機(jī) 的 有 效 性 規(guī) 則 是 0, 如果 違 反 有 效 性 規(guī) 則 , 系 統(tǒng) 提 示 : “ 成 績 必 須 大于 0” 。creat database xsgl.DBCcreat table jsj.DBF (學(xué) 號(hào) C(8) primary key,姓 名 C(6),筆 試 N(5,1)check 筆 試 0 error “ 成 績 必 須 大 于 0” ,上 機(jī) N(5,1)check 上 機(jī) 0 error “ 成 績
6、 必 須 大 于 0” ) 二 、 修 改 表 的 結(jié) 構(gòu)1、 增 加 字 段格 式 : ALTER TABLE ADD (,); NULL|NOT NULLCHECK ERROR提 示 信 息 ;PRIMARY KEY | UNIQUE功 能 : 為 指 定 的 表 的 指 定 字 段 進(jìn) 行 添 加 指 定 的字 段 。 例 3: 為 xsdb表 添 加 兩 個(gè) 字 段 : “ 平 均 分 ”字 段 N(5,1)和 “ 總 分 ” 字 段 N(5,1)。alter table xsdb.dbf add 平 均 分 N(5,1) check 平 均 分 80 error “ 平 均 分 要
7、大 于 80!”alter table xsdb.dbf add 總 分 N(5,1)注 意 : check 對(duì) 非 數(shù) 據(jù) 庫 表 ( .dbc) 不 可 用 。 2、 修 改 字 段格 式 : ALTER TABLE ALTER 類型 (長 度 ) NULL|NOT NULLSET CHECK ERROR提 示 信 息 功 能 : 為 指 定 的 表 的 指 定 字 段 進(jìn) 行 修 改 指 定 的 字段 。 例 4: 在 xsdb表 中 , 修 改 兩 個(gè) 字 段 : “ 學(xué) 號(hào) ”字 段 C( 10) 和 “ 英 語 ” 字 段 N( 6,1) 。alter table xsdb.DBF
8、 alter 學(xué) 號(hào) C(10)alter table xsdb.DBF alter 英 語 N(6,1) 例 5: 修 改 或 定 義 上 機(jī) 字 段 的 有 效 性 規(guī) 則 。alter table jsj.dbf alter 上 機(jī) set check 上 機(jī)0 error 上 機(jī) 應(yīng) 該 大 于 0! 3、 刪 除 字 段ALTER TABLE Drop Drop ;功 能 : 刪 除 指 定 的 表 中 指 定 字 段 。例 6: 刪 除 xsdb表 中 的 平 均 分 、 獎(jiǎng) 學(xué) 金 和 備 注 字 段 。alter table xsdb.dbf drop 平 均 分 drop 獎(jiǎng)
9、 學(xué) 金 drop 備 注 4、 修 改 字 段 名格 式 : alter table renamecolumn to 功 能 : 將 表 中 的 名 字 修 改 為 。例 7: 將 jsj表 的 筆 試 字 段 名 改 為 筆 試 成 績 。alter table jsj.dbf rename column 筆 試 to 筆 試 成 績 三 、 刪 除 表格 式 : DROP TABLE功 能 : 從 數(shù) 據(jù) 庫 和 磁 盤 上 將 表 直 接 刪 除 掉 。例 8: 刪 除 jsj表drop table jsj.dbf 四 、 視 圖 的 定 義 和 刪 除 格 式 :CREATE VIE
10、W AS SELECT-SQL命 令 。 功 能 : 按 照 AS子 句 中 的 SELECT-SQL命 令 提出 的 查 詢 要 求 , 創(chuàng) 建 一 個(gè) 本 地 或 遠(yuǎn) 程 的 SQL視 圖 。視 圖 的 名 稱 由 命 令 中 指 定 。1、 定 義 視 圖 例 9: 從 “ xsgl”數(shù) 據(jù) 庫 所 含 有 的 學(xué) 生 和 選 課兩 個(gè) 表 中 抽 取 學(xué) 號(hào) 、 姓 名 、 和 課 程 號(hào) 3個(gè) 字 段 ,組 成 名 稱 為 “ myview”的 SQL視 圖 。 open database xsgl creat view myview as select 學(xué) 生 .學(xué)號(hào) , 學(xué) 生
11、.姓 名 , 選 課 .課 程 號(hào) from 學(xué) 生 .dbf,選 課 .dbf where 學(xué) 生 .學(xué) 號(hào) =選 課 .學(xué) 號(hào) 2、 查 詢 視 圖 例 10: 查 詢 “ xsgl”數(shù) 據(jù) 庫 中 的 “ myview”視 圖 , 要 求 顯 示 學(xué) 生 姓 名 和 課 程 號(hào) open database xsgl select 姓 名 , 課 程 號(hào) from myview 3、 刪 除 視 圖格 式 : drop view 功 能 : 刪 除 數(shù) 據(jù) 庫 中 指 定 的 視 圖 。例 11: 刪 除 數(shù) 據(jù) 庫 “ xsgl”中 的 “ myview”視圖 open database
12、 xsgldrop view myview 6.3 SQL 的 數(shù) 據(jù) 查 詢 功 能一 、 SELECT語 句 格 式SELECT ALL | DISTINCT .AS ;FROM 聯(lián) 接 方 式 JOIN表 名 ON聯(lián) 接 條件 ;WHERE ;ORDER BY ASC/DESC;GROUP BY ;HAVING分 組 篩 選 條 件 ;INTO ;功 能 : 查 詢 。 二 、 投 影 查 詢1、 查 詢 部 分 字 段 在 select語 句 后 列 出 要 查 詢 的 字 段 , 之 間 用逗 號(hào) 隔 開 。 例 1: 從 學(xué) 生 表 中 查 詢 學(xué) 號(hào) , 姓 名 , 性 別 和出
13、 生 日 期 。 select 學(xué) 號(hào) , 姓 名 , 性 別 , 出 生 日 期 from 學(xué) 生 2、 查 詢 全 部 字 段 可 以 在 select后 面 列 出 全 部 字 段 , 也 可 以 用星 號(hào) “ * ”來 表 示 全 部 字 段 。 例 2: 查 詢 教 師 表 中 的 全 部 字 段 select * from 教 師 select 教 師 號(hào) , 姓 名 , 性 別 , 職 稱 , 工 資 , 政府 津 貼 from 教 師 或 者 3、 取 消 重 復(fù) 記 錄 使 用 distinct取 消 查 詢 結(jié) 果 中 的 重 復(fù) 記 錄 例 3: 查 詢 選 課 表 中
14、有 成 績 記 錄 的 學(xué) 生 學(xué) 號(hào)。 select distinct 學(xué) 號(hào) from 選 課 4、 查 詢 經(jīng) 過 計(jì) 算 的 表 達(dá) 式查 詢 的 列 可 以 是 字 段 , 也 可 以 是 計(jì) 算 后 的 表 達(dá) 式 。 例 4: 從 教 師 表 中 查 詢 教 師 的 姓 名 , 工 資 和漲 50%以 后 的 工 資 。 select 姓 名 , 工 資 , 工 資 *1.5 from 教 師 select 姓 名 , 工 資 , 工 資 *1.5 as 漲 后 工 資from 教 師 或 者 as用 來 修 改 查 詢 結(jié) 果 中 指 定 列 的 列 名 。 其 中as可 以
15、省 略 三 、 條 件 查 詢 使 用 where來 指 定 查 詢 條 件 , 常 用 的 比 較 運(yùn)算 符 如 表 1、 簡 單 條 件 查 詢 例 5: 從 學(xué) 生 表 中 查 詢 三 好 生 的 信 息 select * from 學(xué) 生 where 三 好 生 =.t. 例 6: 從 學(xué) 生 中 查 詢 7月 份 所 生 的 學(xué) 生 的 學(xué) 號(hào)、 姓 名 、 性 別 和 出 生 日 期 select 學(xué) 號(hào) , 姓 名 , 性 別 , 出 生 日 期 from 學(xué) 生 where month( 出 生 日 期 ) =7 例 7: 從 學(xué) 生 表 中 查 詢 入 校 總 分 大 于 6
16、00分 的女 生 或 者 入 校 總 分 小 于 600的 男 生 的 學(xué) 號(hào) 、 姓 名和 入 校 總 分 。 select 學(xué) 號(hào) , 姓 名 , 入 校 總 分 from 學(xué) 生 where ( 入 校 總 分 600 and 性 別 =“女 ” ) or( 入 校 總 分 1990/01/01 and (入 校 總 分 =600 or 入校 總 分 80 六 、 查 詢 的 排 序 使 用 order by 可 以 按 字 段 值 排 序 , asc為 升序 , desc為 降 序 , 默 認(rèn) 為 升 序 。1、 單 列 排 序 例 21: 查 詢 學(xué) 生 表 中 的 學(xué) 生 信 息
17、, 并 按 照 入校 總 分 的 降 序 排 列 。 select * from 學(xué) 生 order by 入 校 總 分 desc 例 22: 統(tǒng) 計(jì) 選 課 表 中 每 門 課 程 的 平 均 成 績 , 并按 照 平 均 分 數(shù) 的 降 序 排 列 select 課 程 號(hào) , avg( 成 績 ) as 平 均 成 績 from 選 課 group by 課 程 號(hào) order by 平 均 成 績 desc select 課 程 號(hào) , avg( 成 績 ) as 平 均 成 績 from 選 課 group by 課 程 號(hào) order by 2 desc 或 者 2表 示 以 查
18、 詢 結(jié) 果 的 第 2列 作 為 排 序 依 據(jù) 2、 多 列 排 序 例 23: 查 詢 學(xué) 生 表 中 的 學(xué) 生 信 息 , 并 按 照 入校 總 分 的 降 序 排 列 , 若 入 校 總 分 相 同 , 按 照 學(xué) 號(hào)的 升 序 排 列 。 select * from 學(xué) 生 order by 入 校 總 分 desc, 學(xué) 號(hào) 七 、 內(nèi) 連 接 查 詢 連 接 條 件 : 兩 表 的 公 共 字 段 值 相 等 , 常 用 書 寫格 式 是 : 表 1.公 共 字 段 =表 2.公 共 字 段 例 23: 從 授 課 表 和 課 程 表 中 , 查 詢 各 個(gè) 教 師擔(dān) 任 的
19、 課 程 的 課 程 號(hào) 及 課 程 名 。 select 授 課 .教 師 號(hào) , 授 課 .課 程 號(hào) , 課 程 .課 程名 from 授 課 , 課 程 where 授 課 .課 程 號(hào) =課 程 .課 程 號(hào) select 授 課 .教 師 號(hào) , 授 課 .課 程 號(hào) , 課 程 .課 程名 from 授 課 join 課 程 on 授 課 .課 程 號(hào) =課 程 .課 程 號(hào) 或 者 例 23: 學(xué) 生 表 和 選 課 表 中 查 詢 學(xué) 號(hào) 為s0803004和 s0803005的 學(xué) 生 的 選 課 情 況 , 顯 示 其學(xué) 號(hào) 、 課 程 號(hào) 和 成 績 。 select
20、學(xué) 生 .學(xué) 號(hào) , 選 課 .課 程 號(hào) , 選 課 .成 績 from 學(xué) 生 , 選 課 where 學(xué) 生 .學(xué) 號(hào) =選 課 .學(xué) 號(hào) and ( 學(xué) 生 .學(xué) 號(hào) =“s08030004” or 學(xué) 生 .學(xué) 號(hào)=“s08030005”) select 學(xué) 生 .學(xué) 號(hào) , 選 課 .課 程 號(hào) , 選 課 .成 績 from 學(xué) 生 join 選 課 on 學(xué) 生 .學(xué) 號(hào) =選 課 .學(xué) 號(hào) where( 學(xué) 生 .學(xué) 號(hào) =“s08030004” or 學(xué) 生 .學(xué) 號(hào)=“s08030005”) 或 者 八 、 自 連 接 查 詢 將 同 一 個(gè) 表 與 其 自 身 進(jìn) 行
21、連 接 , 稱 為 自 連 接。 在 自 連 接 查 詢 涉 及 的 字 段 前 面 , 用 別 名 加 以 限制 。 定 義 表 別 名 的 語 法 是 : 例 24: 查 詢 入 校 總 分 大 于 謝 小 芳 的 學(xué) 生 姓 名、 入 校 總 分 。 select 學(xué) 生 .姓 名 , 學(xué) 生 .入 校 總 分 from 學(xué) 生, 學(xué) 生 b where 學(xué) 生 .入 校 總 分 b.入 校 總 分 and b.姓 名 =“謝 小 芳 ” 九 、 修 改 查 詢 去 向1、 into dbf into table 將 查 詢 結(jié) 果 保 存 到 以 命 名 的 永 久 表中 , 并 打
22、開 該 表 作 為 當(dāng) 前 文 件2、 into cursor 將 查 詢 結(jié) 果 保 存 到 以 命 名的 臨 時(shí) 表 中 , 該 文 件 為 只 讀 表 , 當(dāng) 關(guān) 閉 查 詢 相關(guān) 的 表 文 件 時(shí) , 該 臨 時(shí) 文 件 會(huì) 被 自 動(dòng) 刪 除 。 3、 into file addtive 將 查 詢 結(jié) 果 保 存 到 以 命 名 的 文 本文 件 中 , 擴(kuò) 展 名 為 txt, 如 果 有 addtive, 查 詢 結(jié)果 追 加 到 文 本 文 件 的 尾 部 , 否 則 覆 蓋 該 文 本 文 件 。4、 into array 將 查 詢 結(jié) 果 保 存 到 指 定 的 數(shù)
23、組 中 , 一般 將 存 放 查 詢 結(jié) 果 的 數(shù) 組 作 為 二 維 數(shù) 組 來 使 用 。5、 to printer 將 查 詢 結(jié) 果 輸 出 到 打 印 機(jī) 。 十 、 嵌 套 查 詢1、 帶 比 較 運(yùn) 算 符 的 嵌 套 查 詢 例 25: 查 詢 入 校 總 分 大 于 謝 小 芳 的 學(xué) 生 姓 名、 入 校 總 分 。 ( 1) 查 詢 謝 小 芳 的 入 校 總 分 select 入 校 總 分 from 學(xué) 生 where 姓 名 =“謝 小 芳 ”此 結(jié) 果 的 顯 示 為 : 謝 小 芳 入 校 總 分 為 610 ( 2) 查 詢 入 校 總 分 大 于 610分
24、 的 學(xué) 生 姓 名 、 入校 總 分 。 select 姓 名 , 入 校 總 分 from 學(xué) 生 where 入 校 總 分 ( select 入 校 總 分 from 學(xué) 生 where 姓 名 =“謝 小 芳 ” ) ( 3) 將 610用 第 ( 1) 步 中 的 select語 句 替 換 select 姓 名 , 入 校 總 分 from 學(xué) 生 where 入 校 總 分 610 2、 in謂 詞 嵌 套 查 詢 例 26: 查 詢 有 選 課 記 錄 的 學(xué) 生 信 息 。 ( 1) 在 選 課 表 中 查 詢 選 了 課 的 學(xué) 生 學(xué) 號(hào) select (distinc
25、t 學(xué) 號(hào) ) from 選 課 查 詢 結(jié) 果 為 “ s0803002”, “ s0803003”,“ s0803004”, “ s0803005” ( 2) 查 詢 學(xué) 號(hào) 為 “ s0803002”, “ s0803003”, “ s0803004”, “ s0803005”的 學(xué) 生 信 息 。 select * from 學(xué) 生 where 學(xué) 號(hào) in( “ s08030002”, “ s08030003”, “ s08030004”, “ s08030005” ) ( 3) 將 “ s0803002”, “ s0803003”,“ s0803004”, “ s0803005”用
26、 第 ( 1) 步 中 的select語 句 替 換 select * from 學(xué) 生 where 學(xué) 號(hào) in( select distinct 學(xué) 號(hào) from 選 課 ) 3、 exists謂 詞 嵌 套 查 詢 例 27: 查 詢 學(xué) 號(hào) 為 s0803002的 學(xué) 生 選 修 的課 程 名 稱 select 課 程 名 from 課 程 where exists (select * from 選 課 where 選 課 .課 程 號(hào) =課 程 .課程 號(hào) and 學(xué) 號(hào) =“s0803002”) 例 28: 查 詢 學(xué) 號(hào) 為 s0803002的 學(xué) 生 沒 有 選修 的 課 程
27、名 稱 select 課 程 名 from 課 程 where not exists ( select * from 選 課 where 選 課 .課 程 號(hào) =課 程 .課 程 號(hào) and 學(xué) 號(hào) =“s0803002”) 4、 any、 all、 some謂 詞 嵌 套 查 詢例 29: 查 詢 入 校 總 分 大 于 某 個(gè) 三 好 生 的 女 生 的 信 息 。 select * from 學(xué) 生 where 入 校 總 分 any (select 入 校 總 分 from 學(xué) 生 where 三 好 生 =.t. ) and 性 別 =“女 ” 例 30: 查 詢 入 校 總 分 大
28、 于 所 有 三 好 生 的 學(xué) 生 信 息。 select * from 學(xué) 生 where 入 校 總 分 all (select 入 校 總 分 from 學(xué) 生 where 三 好 生 =.t. ) 此 處 的 any也 可 以 用 some替 換 十 一 、 集 合 查 詢用 union可 以 進(jìn) 行 集 合 查 詢 例 31: 查 詢 入 校 總 分 大 于 600分 或 者 小 于590分 的 學(xué) 生 姓 名 。 要 求 使 用 集 合 查 詢 。 select 姓 名 from 學(xué) 生 where 入 校 總 分 600 union select 姓 名 from 學(xué) 生 wh
29、ere 入 校 總分 590 注 意 : 使 用 union集 合 查 詢 時(shí) , 會(huì) 自 動(dòng) 取 消重 復(fù) 記 錄 。 6.4 SQL 的 數(shù) 據(jù) 操 縱 功 能一 、 插 入 數(shù) 據(jù) 格 式 : insert into (,) values (,) 例 1、 在 課 程 表 中 插 入 一 條 新 記 錄 ( “ c170”,“ 操 作 系 統(tǒng) ” , 48) insert into 課 程 values( “ c170”, “ 操 作系 統(tǒng) ” , 48) 二 、 更 新 數(shù) 據(jù) 格 式 : update ! set= , = where 功 能 : 用 指 定 的 新 值 更 新 記
30、錄 。 例 2、 在 課 程 表 中 課 程 號(hào) 為 “ c170”的 課 時(shí) 數(shù) 改為 32。 update 課 程 set 課 時(shí) =32 where 課 程 號(hào)=“c170” 三 、 刪 除 數(shù) 據(jù)格 式 : delete from where 功 能 : 邏 輯 刪 除 一 條 或 多 條 記 錄說 明 : 沒 有 where子 句 , 表 示 邏 輯 刪 除 所 有 記 錄 。 例 3、 邏 輯 刪 除 課 程 表 中 課 程 號(hào) 為 “ c170”的 記錄 delete from 課 程 where 課 程 號(hào) =“c170” 注 意 : 若 要 物 理 刪 除 必 須 使 用 pack命 令 。
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。