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. 视图

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

定义视图

查询和更新视图

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

                     

© 小时科技 保留一切权利