• 首页

  • 文章归档

  • 友链

  • 关于页面
D u e l s , I S h e e p !
D u e l s , I S h e e p !

ISheep

Code for fun, Make world better

12月
30
大学课程

Sql Programming

发表于 2019-12-30 • 字数统计 3604 • 被 134 人看爆

Ⅰ.定义关系模式

1.1 使用CREATE TABLE定义关系模式

[https://img.codelin.xyz/blog/20191118/4fGylQ5fRFHX.JPG]

nchar中的n代表Unicode编码

1.2 定义主键约束

1.3 定义唯一值约束

  • UNIQUE约束:在该列的取值必须唯一,但可以取空值
  • PRIMARY KEY约束:在该列的取值必须唯一,不能取空值

1.4 定义空值约束

mark

1.5 基于属性的CHECK约束

CHECK约束时当该属性获得新值时被检查

mark

CHECK(gender = 'F' OR gender ='M')也可以

或者最后写约束

1.6 基于元组的CHECK约束

与属性相似

1.7 设置默认值

一行最后加入DEFAULT '...'比如

gender CHAR(1) DEFAULT 'M'当不赋予gender值时默认为M

1.8 修改关系模式

  • 使用DROP TABLE语句删除关系模式

    DROP TABLE MovieStars表示从数据库模式中删除MovieStars模式,包括里面的元组也一起删除。

  • 使用ALTER TABLE语句更改关系模式

    1. 使用ADD子句添加属性和约束

      ALTER TABLE MovieStars ADD mobile NCHAR(11) DEFALUT 'unlisted';\

    2. 使用DROP子句删除属性和约束

      ALTER TABLE MovieStars DROP mobile;

Ⅱ.简单查询

SELECT-FROM-WHERE查询语句

  • FROM子句:查询所引用的关系。
  • WHERE子句:表达查询满足条件的元组。
  • SELECT子句:关系中满足条件的属性在结果中显示出来。

例:查找Disney公司,在2019年制作的所有电影的有关信息。

SELECT *
FROM Movies
WHERE studioName = 'Disney' AND year = 2019

投影

例:查找Disney公式,在2019年制作的所有电影的片名和影片长度。

SELECT title AS name, length duration   --AS 或者 空格可重命名
FROM Movies
WHERE studioName = 'Disney' AND year = 2019

也可用表达式取代属性:

SELECT title name, length/60.0 lengthinHours   --用表达式表示 .0表示结果为小数
FROM Movies
WHERE studioName = 'Disney' AND year = 2019

WHERE子句(选择操作)

表达查询满足条件的元组

运算符/关键字:

  • 比较 =,>,<,>=,<=,<>,!>,!<
  • 确定范围 [NOT] BETWEEN...AND...
  • 确定集合 [NOT] IN
  • 字符匹配 [NOT] LIKE
  • 空值 IS [NOT] NULL
  • 逻辑 AND OR NOT
  • 串的拼接 +

例:查找Disney公司,在2015年和2019年之间制作的所有电影片名和影片长度。

SELECT title,length
FROM Movies
WHERE studioName = 'Disney' AND year BETWEEN 2015 AND 2019
--BETWEEN 2015 AND 2019相当于
year >=2015 AND year <= 2019
--也等于集合形式
year in (2015,2016,2017,2018,2019)
  • 日期的格式:'yyyy-mm-dd','mm/dd/yyyy'
  • 时间的格式:"hh:mm:ss.ssss"
  • 日期时间的格式:'yyyy-mm-dd hh:mm:ss.ssss'
--例:查询1990年以后出生的男演员
SELECT name
FROM MovieStars
WHERE birthdate >= '1990-01-01' AND gender = 'M'
--例:查询1980年到1990年间出生的男演员
SELECT name
FROM MovieStars
WHERE gender = 'M' AND 
birthdata >= '1980-01-01' AND birthdata < '1991-01-01'
/*不要写成birthdate BETWEEN '1980-01-01' AND '1990-12-31'
或者birthdata >= '1980-01-01' AND  < '1991-01-01'*/

输出排序

  • 对查询结果的元组以某种顺序表示

    ORDER BY属性列表ASC/DESC,前者表示升序,后者表示降序

    • 排序实在FROM、WHERE等子句的结果上进行的,排序之后再执行SELECT子句
    • 排序列可以是表达式:ORDER BY A+B DESC
    • 排序默认升序ASC,也可以指定按降序DESC排序
--例:查询Disney公司2019年拍摄的影片信息,以片长的升序排列,同样片长的,以片名字母的降序排列
SELECT *
FROM Movies
WHERE studioName = 'Disney' AND year = 2019
ORDER BY length, title DESC

Ⅲ. 字符串的比较

  • 按字典顺序和字母表顺序从前往后

    'fodder' < 'foo'

    'bar' < 'bargin'

  • 字符串匹配

    s LIKE p s是字符串,p是通配符表示的模式,有:

    • % 任意长度为n的字符串
    • _ 单个字符
    • [ ] 指定范围内的任意单个字符
    • [^] 不在指定范围内的任意单个字符

字符串模糊匹配

/*带通配符_的模糊匹配
例1:查找片名“以Star开头,后面的单词是四个字符”的电影名称。*/
SELECT title
FROM Movies
WHERE title LIKE 'STAR____';

/*带通配符%的模糊匹配
例2:查找片名中“含有s”的电影*/
SELECT title
FROM Movies
WHERE title LIKE '%s%';
/*注意区分:
s%:以s开头的字符串
%s:以s结尾的字符串
%s%:含有s的字符串*/

/*带单引号的模糊匹配
例3:查找片名中“含有所有格's”的电影*/
SELECT title
FROM Movies
WHERE title LIKE '%''s%';--SQL中约定两个连续的单引号表示一个单引号

/*带%或_的模糊匹配
方法:SQL中用ESCAPE 'x'来指定任意字符x临时担任转义字符
例3:查找片名中“含有所有格's”的电影*/
SELECT title
FROM Movies
WHERE title LIKE '%''s%';--SQL中约定两个连续的单引号表示一个单引号

  • 带%或_的模糊匹配
    方法:SQL中用ESCAPE 'x'来指定任意字符x临时担任转义字符

上图中例子表示:以%开头,以_结尾,中间任意多个字符的字符串

--例:查询片名中带“中国”或“中华”两个字的影片信息。
SELECT *
FROM Movies
WHERE title LIKE '%中国%' OR title LIKE '%中华%';
--或者
SELECT *
FROM Movies
WHERE title LIKE '%中[国华]%';

字符串拼接

  • '+'拼接,要求运算符两边均是字符串
  • 拼接时左右两边的空格均保留

空值和涉及空值的比较

SQL中的空值NULL,有许多不同的解释,NULL的运算规则:

  • NULL和其他任何值的算术运算结果都是NULL
  • NULL是一个特殊值,但又不算是一个常量,所以不能直接将NULL作为操作数
  • 判断x的值是否为空值
    • x IS NULL x为空时,结果为TRUE
    • x IS NOT NULL x不为空时,结果为TRUE
--例:查询Studios表中没有登记地址的电影公司
SELECT name
FROM Studios
WHERE address IS NULL
--不能写成address = NULL
分享到:
Chrome插件-Vimium
数据库理论笔记
  • 文章目录
  • 站点概览
ISheep

🐏 ISheep

放羊么?

Github Twitter Email Telegram RSS
看爆 Top5
  • 2020年终总结 538次看爆
  • 【转载】 2010年的房地产调控,我们收获了什么?写在房价暴涨前 423次看爆
  • 正则表达式入门 415次看爆
  • 搬家 408次看爆
  • 二〇二一 · 迷茫 、恐慌 369次看爆

站点已萌萌哒运行 00 天 00 小时 00 分 00 秒(●'◡'●)ノ♥

Copyright © 2022 ISheep 浙ICP备19046944号

由 Halo 强力驱动 · Theme by Sagiri · 站点地图