关系数据库标准语言SQL01

Posted Weikun Xing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关系数据库标准语言SQL01相关的知识,希望对你有一定的参考价值。

结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。

关系数据库标准语言SQL02

文章目录

SQL语言介绍

SQL的特点

1.综合统一
2.高度非过程化
3.面向集合的操作方式
4.同一种语法结构提供两种使用方式
5.语言简洁、易学易用

SQL语言的组成

1.数据定义语言(DDL)

DDL用来定义、修改、删除数据库中的各种对象,包括创建、修改、删除或重命名模式对象(CREATE、ALTER、DROP、RENAME)的语句,以及删除表中所有行但不删除表(TRUNCATE)的语句等

2.数据操纵语言(DML)

DML的命令用来查询、插入、修改、删除数据库中的数据,包含用于查询数据(SELECT)、添加新行数据(INSERT)、修改现有行数据(UPDATE)、删除现有行数据(DELETE)的语句等

3.数据控制语言(DCL)

DCL用于事务控制、并发控制、完整性和安全性控制等。事务控制用于把一组DML语句组合起来形成一个事务并进行事务控制。通过事务语句可以把对数据所做的修改保存起来(COMMIT)或者回滚这些修改(ROLLBACK)。在事务中设置一个保存点(SAVEPOINT),以便用于可能出现的回溯操作;通过管理权限(GRANT、REVOKE)等语句完成安全性控制以及通过锁定一个数据库表(LOCKTABLE)限制用户对数据访问等操作,实现并发控制。

数据定义

数据库的定义和删除

1.创建数据库

mysql> CREATE DATABASE LearnMySQL;
Query OK, 1 row affected (0.18 sec)

2.选择数据库

mysql> USE LearnMySQL;
Database changed

3.删除数据库

mysql> DROP DATABASE LearnMySQL;
Query OK, 0 rows affected (0.19 sec)

数据类型

1.字符串类型

CHAR:描述定长的字符串,说明格式为CHAR(L),其中L为字符串长度,取值范围为1~255。比L大的值将被截断,比L小的值将用空格填补。

VARCHAR:描述变长的字符串,说明格式为VARCHAR(L),其中L为字符串长度,取值范围为1~255。比L大的值将被截断,比L小的值不会用空格填补,按实际长度存储。

2.数值类型

INT:用于表示整数,存储长度默认为4个字节。

DECIMAL:可以用来表示所有的数值数据,说明格式为DECIMAL(p,s),其中p表示数值数据的最大长度,s表示数值数据中小数点后的数字位数,p,s在定义时可以省略,例如DECIMAL(5)、DECIMAL

3.日期和时间类型

DATE:用来保存固定长度的日期数据

TIME:用来保存固定长度的时间数据

DATETIME:用来保存固定长度的日期时间数据。日期格式为’YYYY-MM-DD’;时间格式为’HH:MM:SS’;日期时间格式为’YYYY-MM-DD HH:MM:SS’。

4.布尔类型

BOOLEAN:TRUE、FALSE

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

1.创建表

mysql> CREATE TABLE product
    -> (
    -> p_code DECIMAL(6),
    -> p_name VARCHAR(30),
    -> p_price DECIMAL(5,2)
    -> );
Query OK, 0 rows affected (0.41 sec)

mysql> DESC product;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| p_code  | decimal(6,0) | YES  |     | NULL    |       |
| p_name  | varchar(30)  | YES  |     | NULL    |       |
| p_price | decimal(5,2) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql> CREATE TABLE ord
    -> (
    -> id INT AUTO_INCREMENT PRIMARY KEY,
    -> ordno DECIMAL(8),
    -> p_code DECIMAL(6),
    -> s_code DECIMAL(6),
    -> ordate DATETIME DEFAULT CURRENT_TIMESTAMP,
    -> price DECIMAL(8,2)
    -> );
Query OK, 0 rows affected (0.34 sec)

将id列设置为自增类型字段
在默认情况下,自增类型字段的值从1开始,步长为1.
设置自增类型的字段,需将其设置为主键,否则数据表将创建失败。
同时,为ordate字段设置默认值为当前系统时间。

mysql> DESC ord;
+--------+--------------+------+-----+-------------------+-------------------+
| Field  | Type         | Null | Key | Default           | Extra             |
+--------+--------------+------+-----+-------------------+-------------------+
| id     | int          | NO   | PRI | NULL              | auto_increment    |
| ordno  | decimal(8,0) | YES  |     | NULL              |                   |
| p_code | decimal(6,0) | YES  |     | NULL              |                   |
| s_code | decimal(6,0) | YES  |     | NULL              |                   |
| ordate | datetime     | YES  |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
| price  | decimal(8,2) | YES  |     | NULL              |                   |
+--------+--------------+------+-----+-------------------+-------------------+
6 rows in set (0.00 sec)

2.利用子查询来创建表

mysql> CREATE TABLE ord_c
    -> SELECT * FROM ord;
Query OK, 0 rows affected (0.54 sec)
Records: 0  Duplicates: 0  Warnings: 0

3.修改表的结构

为表增加一个新列

mysql> ALTER TABLE ord_c
    -> ADD telephone VARCHAR(11);
Query OK, 0 rows affected (0.27 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC ord_c;
+-----------+--------------+------+-----+-------------------+-------------------+
| Field     | Type         | Null | Key | Default           | Extra             |
+-----------+--------------+------+-----+-------------------+-------------------+
| id        | int          | NO   |     | 0                 |                   |
| ordno     | decimal(8,0) | YES  |     | NULL              |                   |
| p_code    | decimal(6,0) | YES  |     | NULL              |                   |
| s_code    | decimal(6,0) | YES  |     | NULL              |                   |
| ordate    | datetime     | YES  |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
| price     | decimal(8,2) | YES  |     | NULL              |                   |
| telephone | varchar(11)  | YES  |     | NULL              |                   |
+-----------+--------------+------+-----+-------------------+-------------------+
7 rows in set (0.00 sec)

修改一个表中已有的列
一个ALTER TABLE …MODIFY语句只能为表修改一列。

mysql> ALTER TABLE ord_c
    -> MODIFY telephone VARCHAR(13) DEFAULT '0431-8657130';
Query OK, 0 rows affected (0.15 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC ord_c;
+-----------+--------------+------+-----+-------------------+-------------------+
| Field     | Type         | Null | Key | Default           | Extra             |
+-----------+--------------+------+-----+-------------------+-------------------+
| id        | int          | NO   |     | 0                 |                   |
| ordno     | decimal(8,0) | YES  |     | NULL              |                   |
| p_code    | decimal(6,0) | YES  |     | NULL              |                   |
| s_code    | decimal(6,0) | YES  |     | NULL              |                   |
| ordate    | datetime     | YES  |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
| price     | decimal(8,2) | YES  |     | NULL              |                   |
| telephone | varchar(13)  | YES  |     | 0431-8657130      |                   |
+-----------+--------------+------+-----+-------------------+-------------------+
7 rows in set (0.00 sec)

从一个表中删除一列

mysql> ALTER TABLE ord_c
    -> DROP telephone;
Query OK, 0 rows affected (0.53 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC ord_c;
+--------+--------------+------+-----+-------------------+-------------------+
| Field  | Type         | Null | Key | Default           | Extra             |
+--------+--------------+------+-----+-------------------+-------------------+
| id     | int          | NO   |     | 0                 |                   |
| ordno  | decimal(8,0) | YES  |     | NULL              |                   |
| p_code | decimal(6,0) | YES  |     | NULL              |                   |
| s_code | decimal(6,0) | YES  |     | NULL              |                   |
| ordate | datetime     | YES  |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
| price  | decimal(8,2) | YES  |     | NULL              |                   |
+--------+--------------+------+-----+-------------------+-------------------+
6 rows in set (0.00 sec)

4.截断表和删除表

截断表
删除了表中所有数据行,但表的结构依然保留

mysql> TRUNCATE TABLE ord_c;
Query OK, 0 rows affected (0.54 sec)

删除表
不仅删除表中的数据而且删除表的结构。

mysql> DROP TABLE ord_c;
Query OK, 0 rows affected (0.22 sec)

mysql> DESC ord_c;
ERROR 1146 (42S02): Table 'learnmysql.ord_c' doesn't exist

数据查询

基本查询

查询所有列

mysql> select * from  products;
+---------+---------------------+------------+
| prod_id | prod_name           | prod_price |
+---------+---------------------+------------+
| BNBG01  | Fish bean bag toy   |       3.49 |
| BNBG02  | Bird bean bag toy   |       3.49 |
| BNBG03  | Rabbit bean bag toy |       3.49 |
| BR01    | 8 inch teddy bear   |       5.99 |
| BR02    | 12 inch teddy bear  |       8.99 |
| BR03    | 18 inch teddy bear  |      11.99 |
| RGAN01  | Raggedy Ann         |       4.99 |
| RYL01   | King doll           |       9.49 |
| RYL02   | Queen dool          |       9.49 |
+---------+---------------------+------------+
9 rows in set (0.04 sec)

查询指定的列

mysql> select prod_name from  products;
+---------------------+
| prod_name           |
+---------------------+
| Fish bean bag toy   |
| Bird bean bag toy   |
| Rabbit bean bag toy |
| 8 inch teddy bear   |
| 12 inch teddy bear  |
| 18 inch teddy bear  |
| Raggedy Ann         |
| King doll           |
| Queen dool          |
+---------------------+
9 rows in set (0.00 sec)

去掉重复行

复制了一张products表,并加入了一行重复数据

mysql> SELECT * FROM products_c;
+---------+---------------------+------------+
| prod_id | prod_name           | prod_price |
+---------+---------------------+------------+
| BNBG01  | Fish bean bag toy   |       3.49 |
| BNBG02  | Bird bean bag toy   |       3.49 |
| BNBG03  | Rabbit bean bag toy |       3.49 |
| BR01    | 8 inch teddy bear   |       5.99 |
| BR02    | 12 inch teddy bear  |       8.99 |
| BR03    | 18 inch teddy bear  |      11.99 |
| RGAN01  | Raggedy Ann         |       4.99 |
| RYL01   | King doll           |       9.49 |
| RYL02   | Queen dool          |       9.49 |
| RYL02   | Queen dool          |       9.49 |
+---------+---------------------+------------+
10 rows in set (0.00 sec)
mysql> SELECT DISTINCT * FROM products_c;
+---------+---------------------+------------+
| prod_id | prod_name           | prod_price |
+---------+---------------------+------------+
| BNBG01  | Fish bean bag toy   |       3.49 |
| BNBG02  | Bird bean bag toy   |       3.49 |
| BNBG03  | Rabbit bean bag toy |       3.49 |
| BR01    | 8 inch teddy bear   |       5.99 |
| BR02    | 12 inch teddy bear  |       8.99 |
| BR03    | 18 inch teddy bear  |      11.99 |
| RGAN01  | Raggedy Ann         |       4.99 |
| RYL01   | King doll           |       9.49 |
| RYL02   | Queen dool          |       9.49 |
+---------+---------------------+------------+
9 rows in set (0.00 sec)

为列起别名

mysql> SELECT prod_id AS 产品编号,prod_name AS 产品名称,prod_price AS 产品价格 FROM products;
+--------------+---------------------+--------------+
| 产品编号     | 产品名称            | 产品价格     |
+--------------+---------------------+--------------+
| BNBG01       | Fish bean bag toy   |         3.49 |
| BNBG02       | Bird bean bag toy   |         3.49 |
| BNBG03       | Rabbit bean bag toy |         3.49 |
| BR01         | 8 inch teddy bear   |         5.99 |
| BR02         | 12 inch teddy bear  |         8.99 |
| BR03         | 18 inch teddy bear  |        11.99 |
| RGAN01       | Raggedy Ann         |         4.99 |
| RYL01        | King doll           |         9.49 |
| RYL02        | Queen dool          |         9.49 |
+--------------+---------------------+--------------+
9 rows in set (0.00 sec)

比较判断

mysql> SELECT * FROM products WHERE prod_id='BR01';
+---------+-------------------+------------+
| prod_id | prod_name         | prod_price |
+---------+-------------------+------------+
| BR01    | 8 inch teddy bear |       5.99 |
+---------+-------------------+------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM products WHERE prod_price >5;
+---------+--------------------+------------+
| prod_id | prod_name          | prod_price |
+---------+--------------------+------------+
| BR01    | 8 inch teddy bear  |       5.99 |
| BR02    | 12 inch teddy bear |       8.99 |
| BR03    | 18 inch teddy bear |      11.99 |
| RYL01   | King doll          |       9.49 |
| RYL02   | Queen dool         |       9.49 |
+---------+--------------------+------------+

之间判断

mysql> SELECT * FROM products WHERE prod_price BETWEEN 5 AND 9;
+---------+--------------------+------------+
| prod_id | prod_name          | prod_price |
+---------+--------------------+------------+
| BR01    | 8 inch teddy bear  |       5.99 |
| BR02    | 12 inch teddy bear |       8.99 |
+---------+--------------------+------------+
2 rows in set (0.00 sec)

字符串的模糊查询

%用于表示0个或任意多个字符;_表示任意一个字符

mysql> SELECT * FROM products WHERE prod_id LIKE 'R%';
+---------+-------------+------------+
| prod_id | prod_name   | prod_price |
+---------+-------------+------------+
| RGAN01  | Raggedy Ann |       4.99 |
| RYL01   | King doll   |       9.49 |
| RYL02   | Queen dool  |       9.49 |
+---------+-------------+------------+
3 rows in set (0.00 sec)

mysql> SELECT * FROM products WHERE prod_id LIKE '_G%';
+---------+-------------+------------+
| prod_id | prod_name   | prod_price |
+---------+-------------+------------+
| RGAN01  | Raggedy Ann |       4.99 |
+---------+-------------+------------+
1 row in set (0.00 sec)
mysql> SELECT * FROM products WHERE prod_id NOT LIKE 'B%'以上是关于关系数据库标准语言SQL01的主要内容,如果未能解决你的问题,请参考以下文章

SQL语言

SQL语言

标准化 h/w

从控制表中获取不同产品的最新价格

数学建模太难,如何以Tableau可视化的方式打开?

数学建模太难,如何以Tableau可视化的方式打开?