SQL 入门语法

                     

贡献者: 待更新

  • 本文处于草稿阶段。

1. SQL 基本语法

SQL 库操作

1.结构创建

2.显示结构

3.数据操作(数据表)

插入数据

数据查询

//数据查询的一般格式为
SELECT [ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]...
FROM <表名或视图名>[,<表名或视图名>..]|(<SELECT语句>)[AS]<别名>
[WHERE <条件表达式>]
[GROUP BY<列名 1> [HAVING <条件表达式> ]]
[ORDER BY<列名 2> [ASC|DESC]];

例如:查询全体学生的学号与姓名
SELECT Sno,Sname
FROM Stuent;

例如:从学生表查询名字为张三的学号
SELECT ID
FROM students
WHERE name='张三';

例如:查询全体学生的详细记录
SELECT *
FROM Student;

表1:常用的查询条件
查询条件 谓词
比较 =,>,<,>=,<=,<>,!>,!<;NOT+上述比较运算符
确定范围 BETWEEN AND,NOT BETWEEN AND
确定集合 IN, NOT IN
字符匹配 LIKE,NOT LIKE
空值 IS NULL
多重条件 AND,OR,NOT

   1.比较大小

例1:查询计算机科学系全体学生的名单
SELECT Sname
FROM Student
WHERE Sdept='计算机科学';

例2:查询所有年龄在20岁一下的学生姓名以及年龄
SELECT Sname,Sage
FROM Student
WHERE Sage<20;
2.确定范围
例1:查询年龄在20-33岁(包括20岁和23岁)之间的学生姓名
SELECT Sname
FROM Student
WHERE Sage BETWEEN 20 AND  23;

例2:查询不在年龄在20-33岁之间的学生姓名
SELECT Sname
FROM Student
WHERE Sage NOT BETWEEN 20 AND  23;
3.确定集合
例1:查询计算机科学系,数学系学生的姓名和性别
SELECT Sname,Ssex
FROM Student
WHERE Sdept IN('计算机系','数学系')

例2:查询不是计算机科学系,也不是数学系学生的姓名和性别
SELECT Sname,Ssex
FROM Student
WHERE Sdept NOT IN('计算机系','数学系')
4.字符匹配
例1:从学生表查询姓名为张的学号
// % 表示任意多个字符
//_ 表示任意多个任意字符

SELECT ID
FROM students
WHERE  name like '张%' ;
或者
SELECT ID
FROM students
WHERE  name like '张_' ;

例2:查询名字中第二个字为“文”的学生的姓名和学号
SELECT Sname,Sno
FROM Student
WHERE Sname LIKE '_文%';

   5.涉及空置的查询

例如:某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。
查询缺少成绩的学生的学号和课程号

SELECT  Sno,Cno
FROM SC
WHERE Grade IS NULL;   //分数Grade 是空值
6.多重条件查询
例如:查询计算机科学系年龄在20岁一下的学生姓名
SELECT  Sname
FROM Student
WHERE Sdept='计算机科学' AND Sage<20

例如:查询选修了3号课程的学生的学号及成绩,查询结果按分数的降序排列
SELECT Sno,Grade
FROM  SC
WHERE Cno='3'
ORDER BY Grade DESC;

表2:聚集函数
COUNT (*) *统计元组个数
COUNT([DISTINCE|ALL]<列名>) 统计一列中值的个数
SUM ([DISTINCE|ALL]<列名>) 计算一列值的总和
AVG([DISTINCE|ALL]<列名>) 计算一列值的平均值
MAX([DISTINCE|ALL]<列名>) 求一列值中的最大值
MIN ([DISTINCE|ALL]<列名>) 求一列值中的最小值

例1:查询学生总人数
SELECT *
FROM Student;

例2:查询选修了课程的学生人数
SELECT COUNT(*)
FROM Student;

例3:计算选修1号课程的学生平均成绩
SELECT AVG(Grade)
FROM SC
WHERE  Cno='1';

例4:查询选修1号课程的学生的最高分
SELECT MAX(Grade)
FROM SC
WHERE Cno='1';

例如:求各个课程号及相应的选课人数
SELECT Cno,COUNT(Sno)
FROM SC
GROUP BY Cno;

修改数据

//修改数据的一般格式为:
UPDATE<表名>
SET <l列名>=<表达式> [,<列名>=<表达式>]...
例如:在学生表中,将学生张三的id改为231119002
UPDATE students 
SET id='231119002'
WHERE name='张三';



另外,SET后面除了带文本之外,还可以是数学表达式

例如:将学生id为231119002的学生对应的年龄加2
UPDATE students 
SET age=age+2
WHERE id='231119019'

删除数据

//删除语句的一般格式为
DELETE
FROM<表名>
[WHERE <条件>];
例如:删除students表中名字为张三的信息

DELETE FROM students 
WHERE name='张三';

2. 数据库操作

创建数据库:根据项目需求创建一个存储数据库的仓库

  1. 数据库的创建是存储数据库的基础,数据库的创建通常是一次性的
  2. 创建数据库的语法包含几个部分
    • 关键字 create database
    • 数据库名字:自定义名字
    • 数字,字母和下划线组成
    • 数字不能开头
  3. 创建好的数据库可以在数据存储指定地点看到

显示数据库:通过客户端指令来查看已有的数据库

  1. 数据库的查看是根据用户权限限定的
  2. 数据库的查看分为两种查看方式:
    • 查看全部数据库:show database;
      show  database;
      
    • 查看数据库创建指令:show crete database 数据库名字;
      show crete database db_1;
      

使用数据库

  1. 使用数据库的指令是:use 数据库名字;
    use db_1;
    
  2. 使用数据库的目标
    • 让系统知道后续 SQL 指令都是针对当前选择的数据库
    • 简化后续 SQL 指令的复杂度

修改数据库:修改数据库的相关库选项

  1. 数据库名字不可修改
    • 先新增
    • 后迁移
    • 最后删除
  2. 数据库修改分为两个部分
    • 字符集
    • 校对集
  3. 数据库修改指令:alter database 数据库名字

删除数据库:将当前已有数据库删除

3. 数据定义

   SQL 的数据定义语句

模式的定义和删除

  1. 定义模式
    CREATE SCHEMA <模式名> AUTHORIZATION <用户名>;
    
    如果没有指定 <模式名>,那么 <模式名> 隐含为 <用户名>。
    例如:为用户zhang 创建一个模式 test,并且在其中定义一个表tab1
    CREATE SCHEMA test AUTHORIZATION zhang
    CREATE TABLE tab1(
        COL1 SMALLINT,
        COL2 INT,
        COL3 CHAR(20)
    );
    
  2. 删除模式
    DROP SCHEMA <模式名><CASCADE|RESTRICT>;
    其中 CASCADE和RESTRICT两者必选其一。
    

基本表的定义,删除和修改

  1. 定义基本表
    CREATE TABLE <表名> (
    <列名><数据类型>[列级完整性约束条件]
    [,<列名><数据类型>[列级完整性约束条件]]
    ...
    [,<表级完整性约束条件>]
    );
    
    例如:建立一个”学生”表Student
    CREATE TABLE Student(
        Sno CHAR(9) PRIMARY KEY, /*列级完整性约束条件,Sno是主码*/
        Sname CHAR(20)  UNIQUE,  /*Sname取唯一值*/ 
        Ssex CHAR(2),
        Sage SMALLINT,
        Sdept CHAR(20)
    );
    
  2. 数据类型
    表3:数据类型
    数据类型 含义
    CHAR(n),CHARACTER(n) 长度为 n 的定长字符串
    VARCHAR(n),CHARACTERVARYING(n) 最大长度为 n 的边长字符串
    CLOB 字符串大对象
    BLOB 二进制大对象
    INT,INTEGER 长整型(4 字节)
    SMALLINT 短整型(2 字节)
    BIGINT 大整数(8 字节)
  3. 修改基本表
    ALTER TABLE<表明>
          //ADD子句用于增加新列,新的列级完整性约束条件和新的表级完整性约束条件
    [ADD[COLUMN]<新列名><数据类型>[完整性约束]
    [ADD<表级完整性约束>]
         //DROP COLUMN 子句用于删除表中的列
    [DROP[COLUMN]<列名>[CASCADE|RESTRICT]]
         //DROP CONSTRAINT 子句用于删除指定的完整性约束条件
    [DROP CONSTRAINT <完整性约束名>[RESTRICT|CASCADE]]
         //ALTER COLUMN子句用于修改原有的列定义,包括修改列名和数据类型
    [ALTER COLUMN<列名><数据类型>];
    

索引的建立和删除

  1. 建立索引
    CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
    ON <表名>(<列名>[<次序>] [,<列名>[<次序>]]...)
    
  2. 修改索引
    ALTER INDEX <旧索引名> RENAME TO <新索引名>
    
  3. 删除索引
    DROP INDEX <索引名>
    

4. 视图

   视图式从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。 视图一经定义,就可以和基本表一样被查询,被删除。也可以在一个视图之上再定义新的视图,但对视图的更新(增,删,改)操作则有一定的限制。

定义视图

查询和更新视图

   查询和更新视图的语句与查询和更新基本表的语句相同


致读者: 小时百科一直以来坚持所有内容免费无广告,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 20 元,我们一周就能脱离亏损, 并在接下来的一年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

                     

友情链接: 超理论坛 | ©小时科技 保留一切权利