标准sql语言 mysql_数据库—SQL—标准语言SQL

本文介绍了SQL语言的基本概念,包括其特点、数据定义、数据查询、数据更新等方面。通过实例展示了如何在MySQL中进行模式定义、表的创建、修改和删除,以及查询、连接查询和嵌套查询的操作。还涵盖了使用ALTER TABLE语句修改表结构、使用INSERT语句插入数据、UPDATE语句更新数据以及DELETE语句删除数据。内容深入浅出,适合初学者学习。
摘要由CSDN通过智能技术生成

3.1 SQL概述

3.1.2 SQL的特点1.综合统一 2.高度非过程化 3.面向集合的操作方式 4.用同一种语法结构提供多种使用方式 5.简洁

3.3数据定义

3.3.1 模式的定义和删除

模式定义语句

CREATE SCHEMA AUTHORIZATION

例1: 为用户WANG定义一个模式 S-T

CREATE SCHEMA AUTHORIZATION 如果不指定模式名 默认为用户名

模式的删除

DROP SCHEMA

CASCADE(级联)  删除模式时同时删除所有数据库对象

RESTRICT(限制)   如果已经定义了模式下的数据库对象  如表、图等,则不能删除该模式

二者必选其一

例: DROP SCHEMA ZHANG CASCADE    删除模式ZHANG以及所有数据库对象

3.3.2 基本表的定义、删除与修改

例:建立一个学生表Student

CREATE TABLE Student

( Sno CHAR (9) PRIMARY KEY,//列级完整性约束条件  Sno是主码

Sname CHAR(20) UNIQUE,//Sname取唯一值

Ssex CHAR(2),

Sage SMALLINT,

Sdept CHAR(20)

);

执行语句后会在数据库中建立一个新的空的 学生 表 Student ,并将有关学生表的定义及有关约束条件存放在数据字典中。

数据类型:每一种属性选用一种数据类型,常用的数据类型有CHAR,INT,DATE,TIME等。

*模式和表  每一个基本表都属于某一个模式,一个模式包含多个表,

定义表时定义模式的方法:

1.在表中明显的给出模式名 CREATE TABLE “S-T”.Student(........);   //Student表所属的模式是S-T

2.在创建模式语句中同时创建表

例如:CREATE SCHEMA  TEST AUTHORIZATION ZHANG

CREATE TABLE TAB1(.......);

3.设置所属的模式,在创建表时不用给出模式名

修改基本表:SQL语句用 ALTER TABLE 语句修改基本表

例:向Student表增加入学时间列,数据类型为日期型

ALTER TABLE Student ADD S_entrance DATE;

例:将年龄的数据类型由字符型改为整数

ALTER TABLE Student ALTER COLUMN Sage INT;

例:增加课程名必须取唯一值的约束条件

ALTER TABLE Course ADD UNIQUE(Cname);

删除基本表:用 DROP TABLE 可以删除基本表

例:删除Student表

DROP TABLE Student CASCADE;//若该表上建有视图,则用RESTRICT不能删除,用CASCADE则可以删除

索引的建立和删除(略)

3.4 数据查询

3.4.1 单表查询

例如: 查询全体学生的学号和姓名

SELECT Sno,Sname

FROM Student;

查询全体学生的姓名、学号、所在系

SELECT Sname,Sno,Sdept

FROM Student;

查询全部列

SELECT *

FROM Student;

上式等价于

SELECT Sno,Sname,Ssex,Sage,Sdept

FROM Student;

查询经过计算的值:

查询全体学生的姓名和出生年份

SELECT Sname,2014-Sage  //当时时间减去年龄  结果为算数表达式

FROM Student;

查询出的结果可以是算数表达式、字符串常量、函数,例如:

查询全体学生的姓名,出生年份,所在院系,要用小写字母表示所在院系

SELECT Sname, 'Year of Birth:',2004-Sage,LOWER(Sdept)

FROM Student;

消除重复的行:

SELECT DISTINCT Sno

FROM SC;

如果没有DISTINCT  则缺省值为ALL  等价于

SELECT ALL Sno

FROM SC;

查询满足条件的元组:

例:查询计算机科学系全体学生的名单:

SELECT Sname

FRMO Student

WHERE Sdept = 'CS';

查询年龄在20岁以下的学生姓名及年龄

SELECT Sname,Sage

FROM Student

WHERE Sage<20;

查询考试成绩不合格的学生学号

SELECT DISTINCT Sno

FROM SC

WHERE Gread<60;

查询年龄在20--30岁之间的学生姓名、系别和年龄

SELECT Sname,Sdept,Sage

FROM Student

WHERE Sage BETWEEN 20 AND 30;

确定集合:IN可以用来查找指定集合的元组

查找CS系,MA系,IS 系的学生姓名和性别

SELECT Sname,Ssex

FROM Student

WHERE Sdept IN ('CS','MA','IS');

同理,查找不在集合的元组则用 NOT IN。

字符匹配:

查询学号为200215121的学生的详细情况

SELECT *

FROM Student

WHERE Sno LIKE ‘200215121’;

等价于

SELECT *

FROM Student

WHERE Sno = ‘200215121’;

查找所有刘姓的学生的姓名,学号,性别

SELECT Sname,Sno,Ssex

FROM Student

WHERE Sname LIKE ‘刘%’;

查询姓欧阳,且名字是三个字的学生姓名,学号,性别

SELECT Sname,Sno,Ssex

FROM Student

WHERE Sname LIKE ‘欧阳_’;

查询 DB_Design课程的课程号和学分

SELECT Cno,Ccredit

FROM Course

WHERE Cname LIKE 'DB\_Design' ESCAPE '\';// ESCAPE '\' 表示'\'为换码字符 所以此时 '_' 不具有通配符的含义 是普通的字符

涉及空值的查询:查询没有成绩的(不是0分)的学生学号和课程号

SELECT Sno,Cno

FROM SC

WHERE Grade IS NULL;

查询所有学生的学号和课程号

SELECT Sno,Cno

FROM SC

WHERE Grade IS NOT NULL;

多重条件查询:

查询计算机科学系年龄在20以下的学生姓名

SELECT Sname

FROM Student

WHERE Sdept = 'CS' AND Sage<20;

ORDER BY 子句

使用ORDER BY 子句可使查询结果升序(ASC)或降序(DESC)排序,缺省值为升序

例:查询选修了3号课程的学生学号及成绩,结果按分数降序排序

SELECT Sno,Grade

FROM SC

WHERE Cno = ‘3’

ORDER BY Grade DESC;

聚集函数:COUNT 统计元组个数

SUM 计算总和

AVG 计算平均值

MAX MIN 最大和最小值

例:查询学生总人数

SELECT COUNT(*)

FROM Student;

查询选修了课程的总人数

SELECT COUNT(DISTINCT Sno)

FROM SC;

计算1号课程的学生平均成绩

SELECT AVG (Grade)

FROM SC

WHERE Cno = ‘1’;

查询选修1号课程学生的最高分

SELECT MAX (Grade)

FROM SC

WHERE Cno = ‘1’;

3.4.2 连接查询

例:查询每个学生及其选修课情况

SELECT Student.*,SC.*

FROM Student,SC

WHERE Student.Sno = SC.Sno;   //将Student和SC同一学生的元组连接起来

多表连接

例:查询每个学生的学号 姓名 选修的课程名及成绩

SELECT Student.Sno,Sname,Cname,Grade

FROM Student,SC,Course

WHERE Student.Sno = SC.Sno AND SC.Sno = Course.Cno;

3.4.3 嵌套查询

例:查询与刘晨在同一个系的学生

1,确定刘晨所在系名

SELECT Sdept

FROM Student

WHERE Sname = ‘刘晨’;

结果为 CS

2,查找在CS系中的学生

SELECT Sname

FROM Student

WHERE Sdept = ‘CS’;

将第一步查询潜入到第二步中:

SELECT Sname

FROM Student

WHERE Sdept IN

(SELECT Sdept

FROM Student

WHERE Sname = ‘刘晨’);

带有ANY 或ALL 的查询

例:查询其他系中比计算机科学系所有学生年龄都小的学生姓名及年龄

SELECT Sname,Sage

FROM Student

WHERE  Sage< ALL

(SELECT Sage

FROM Student

WHERE Sdept = 'CS')

AND Sdept <> 'CS';

3.5 数据更新

3.5.1插入数据  使用INSERT语句

例:将一个新学生元组插入到Student表中

INSERT

INTO Student (Sno,Sname,Ssex,Sdept,Sage)

VALUES(‘200215128’,‘陈东’,‘男’,‘IS’,18);

如果没有指明属性列名,则新插入的元组必须在每个属性列上均有值。

例:插入一条选课记录

INSERT

INTO SC(Sno,Cno)

VALUES (‘200215128’,‘1’);

3.5.2 修改数据

例:将学生200215121的年龄改为21岁

UPDATE

SET Sage = 21

WHERE Sno = ‘200215121’;

例:将所有学生年龄加一

UPDATE

SET Sage = Sage + 1;

带子查询的修改语句:

例:将计算机科学系全体学生成绩置零

UPDATE

SET Grade = 0

WHERE ‘CS’ =

(SELECT Sdept

FROM Student

WHERE Student.Sno = SC.Sno);

3.6  删除数据

删除数据用DELETE

例:删除学号为200215128的学生记录

DELETE

FROM Student

WHERE Sno = ‘200215128’;

例:删除所有学生选课记录

DELETE

FROM SC;

SELECT Sname

FROM Student

WHERE Sdept = ‘CS’;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值