SQL常用语法

创建库:
create database school --库名
on primary
(
    name = 'school_dat',  --逻辑名
    filename = 'G:\school.mdf',  --文件路径
    size = 5,  --初始大小
    filegrowth = 10%,  --文件增长大小
    maxsize = 10  --文件最大大小
)
log on
(
    name = 'school_log',
    filename = 'G:\school.ldf',
    size = 3,
    filegrowth = 10%,
    maxsize = 10
)
--删除库
drop database school
创建表
use school
create table Student
(
    Sno char(5) not null unique,  --非空、唯一
    Sname nvarchar(20),
    Sage int default 20,  --默认值20
    Sdept nvarchar(15),
    -- Sgender char(1) default'男',  
    Sgender char(1) constraint c1 check(Sgender in ('男','女')), --指定约束名c1
    -- Sgender char(1) check(Sgender in ('男','女')) 不指定约束名
    Cno char(5),
    constraint c2 primary key(Sno),  --设置主键
    constraint c3 foreign key(Cno) references Class(Cno) --设主外键
)
修改表
--添加新列
alter table student add S_entrance datetime

--修改数据类型
alter table student alter column S_entrance varchar

--添加唯一值约束条件
alter table classInfo add unique(cTitle)

 --添加范围限制
alter table userInfo add constraint test1 check(birth_year > 2006 and birth_year < 2012)
alter table userInfo add constraint test1 check(birth_year between 2006 and 2012)  --包含2006 2012

--删除名为c1的限制
alter table userInfo drop constraint c1
简单查询1
--求数学系学生学号、姓名
select sno, sname
from student
where Sdept = '数学系'

--求选修了课程的学生
select distinct sno   --distinct消除取值相同的记录
from select_course 

--求选修了C1课程的学生学号、成绩;按照成绩降序排列,成绩相同按学号升序排列
select sno, grade
from select_course
where cno = 'C1' 
order by grade desc, sno asc   --order by:按某种顺序显示。asc升序,desc降序

--求选修了C3且成绩在80到90分的学生学号及成绩,成绩以系数0.8输出
select sno, grade*0.8
from select_course
where cno = 'C3' and Grade between 80 and 90  --between and 查找值在指定范围内的元组
简单查询2(通配符)
--求数学系和计算机系里姓张的学生的信息
select *from student
where Sdept in('数学系','计算机系') and Sname like '张%' 
--like:用于查找指定列中与匹配串常量匹配的元组
--_(下划线):匹配任意一个字符
--%(百分号):匹配0个或多个字符
--[]指定范围内的任意一个字符
--[^]不再指定范围内的任意一个字符
e.g:
like '%een' 返回以enn结尾
like '%en%' 返回包含en的任意字符
like '_en' 返回以en结束三个字符的字符串
like '[CK]%' 返回以C或K开始的任意字符串
like '[S-V]ing' 返回长度为四个字符,以ing结尾,开始是从C到V的字符串
like 'M[^c]%' 返回以M开始,第二个字符不是c的任意字符串

--查找对象名称为SQL_M开头,il结尾,中间有一个不确定字符的对象
select* 
from objects 
where object_name like 'SQL#_M_il' escape'#'
说明:这里使用了两个下划线符号,前一个由于有escape字符作标识,
因而被认为是实际存在的下划线符号字符;后一个没有此标识,故被作为通配符。

使用[]来将通配符指定为普通字符
SELECT * 
FROM object 
WHERE column1 LIKE '%54[%]%'
--它将返回所有包含54%的字符串。

--求缺少了成绩的学生学号及课程号
SELECT Sno,Cno
FROM 选课
WHERE Grade IS NULL;
简单查询3
--通过日期求年龄
select stu_id,stu_name
from student
where datediff(year,birthday,getdate())<30

--输出列明,获取日期年份
select stu_name as STUDENT_NAME, year(Birthday) as BIRTHDAY_YEAR
from student

--获取前百分十的元素
select top 10 percent stu_id, grade
from studentgrade
where course_id = 0511
order by grade desc

--分组求平均值
select stu_id, avg(grade) as '平均分'
from studentgrade
group by stu_id having avg(grade)>80
连接查询
select courseTeacher.course_id
from CourseTeacher, Teacher
where teacher.teac_id = courseTeacher.teac_id and teacher.teac_name like '艾%'
-- 等价的嵌套查询
select course_id
from courseteacher
where teac_id in
(select teac_id
from teacher
where teac_name like '艾%')

外部连接查询:

两个表

左外部连接(*=):
SELECT 职工.*,部门名称,电话
FROM 职工,部门
WHERE 职工.所在部门 *= 部门.部门号;
查询结果,没数据的保存为空

嵌套查询1:
--查询与刘晨在同一个系的学生
SELECT  *  
FROM  学生   
WHERE  sdept  in  --此处in可用 =(等号)代替
(SELECT sdept   
FROM  学生    
WHERE  sname='刘晨')

--求选修了数据库的学生学号和姓名
SELECT sno,sname
FROM 学生  --通过学生学号查询信息
WHERE sno IN (SELECT sno  --此处IN不能用=代替
              FROM  选课    --通过课程号求选修了数据库的学生学号                    
              WHERE cno IN (SELECT cno --此处IN可用=代替                                            
                            FROM  课程   --先求出数据库的课程号                                      
                            WHERE cname = ‘数据库’))  
--连接查询来表达
SELECT 学生.Sno,Sname
FROM  学生,课程,选课
WHERE 学生.Sno = 选课.Sno AND 课程.Cno = 选课.Cno  AND 课程.Cname = '数据库'

:1、嵌套查询中,子查询不能使用 order by 子句
2、使用嵌套查询进行比较测试时,要求嵌套语句必须是返回单值的查询语句(>,<,=,>=,<=,!=或<>)

嵌套查询2(比较符与ANY/ALL,EXISTS):
--求C1课程的成绩高于刘晨的C1课程成绩的学生学号和成绩
SELECT sno,Grade
FROM 选课  --找出大于该成绩分数及学号
WHERE cno='C1' AND Grade > (SELECT Grade
                            FROM 选课  --通过学号找出该同学成绩
                            WHERE cno = 'C1' AND Sno =
                                          (SELECT Sno
                                           FROM 学生  --找出学号
                                           WHERE sname='刘晨'))

--求其他系中比计算机系某一学生年龄小的学生
SELECT *
FROM 学生
WHERE Sage < ANY (SELECT Sage --找出计算机系学生年龄
                  FROM 学生
                  WHERE Sdept='计算机系') AND Sdept<>'计算机系';

--求其他系中比计算机系学生年龄都小的学生
SELECT *
FROM 学生
WHERE Sage < All (SELECT Sage
                  FROM 学生
                  WHERE Sdept='计算机系') AND Sdept<>'计算机系';  --非计算机系

--求没有选修C2课程的学生姓名
SELECT Sname
FROM 学生
WHERE NOT EXISTS (SELECT * --求选修了C2的去掉NOT
                  FROM 选课
                  WHERE 学生.Sno=Sno AND Cno='C2')

--查询选修了全部课程的学生的姓名
SELECT Sname
FROM 学生
WHERE NOT EXISTS (SELECT *
                  FROM 课程
                  WHERE NOT EXISTS (SELECT *
                                    FROM 选课
                                    WHERE 学生.Sno=Sno AND 课程.Cno=Cno))
函数查询(AVG、SUM、MIN、MAX、COUNT())
--求学生的总人数
SELECT COUNT (*)
FROM 学生;

--求选修了课程的学生人数
SELECT COUNT(DISTINCT Sno)
FROM 选课

--求课程和选修该课程的人数
SELECT cno,COUNT(sno)
FROM 选课
GROUP BY Cno

--求选修课超过3门课的学生学号
SELECT Sno
FROM 选课
GROUP BY Sno HAVING COUNT(*)>3

--求“C1”课程的平均成绩
SELECT Cno,AVG(Grade)
FROM 选课
WHERE Cno='C1'
GROUP BY Cno

--求学生“0101”的总成绩
SELECT SUM(ALL(Grade))
FROM 选课
WHERE Sno='0101'

--求学生“0101”的平均成绩
SELECT AVG(ALL(Grade))
FROM 选课
WHERE Sno='0101'
数据更新
--插入:
insert into <表名>(列名,列名...)
values(数据,数据)

--更新:
update <表名>
set ...
where ...

--删除:
delete
from <表名>
where ...
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • 1. SQL 简介 SQL 的目标 理想情况下,数据库语言应允许用户: 建立数据库和关系结构 完成基本数据管理任务...
    板蓝根plank阅读 2,330评论 0 11
  • SQL 中最重要的 DDL ( 数据定义语言)语句:CREATE DATABASE - 创建新数据库ALTER D...
    胖子爱猪蹄阅读 5,435评论 3 95
  • 你还好么?不要做自己都讨厌的人呀! 静心,深呼吸,睡觉!不尊重你对你不好的人不值得你去用心,花费时间!乖,睡吧!
    心有猛虎细嗅蔷薇cc阅读 113评论 0 0
  • 你若盛开,蝴蝶自来, 君如枯萎,青睐不再, 身俱异才,犹当发奋, 勿自掩埋,禀赋恐衰。
    一席之言阅读 187评论 0 0
  • 30天的写作计划,已经进行了一半。即使只是要求坚持每天写500字,依然非常吃力。拿到写作话题,从早想到晚,有时候也...
    定云止水_0cc5阅读 268评论 1 3