SQL语言基础知识(一)

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS SQL Server,独享型 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 这是从零开始系统学习SQL语言的课程,课程中的所有SQL语句同时兼容MySQL、Oracle、SQL Server和PostgreSQL等4种最流行的数据库。

01

课程说明


这是从零开始系统学习SQL语言的课程,课程中的所有SQL语句同时兼容MySQL、Oracle、SQL Server和PostgreSQL等4种最流行的数据库。从SQL简介和创建表开始,涵盖了全部常用的SQL知识,学完这个课程马上就可以做数据分析了。


02

实验脚本

使用下面的脚本创建学习环境




drop table if exists dept;create table dept(  deptno  int primary key,  dname varchar(12) not null,  loc char(10));insert into dept values(1,'Development','NEW YORK');insert into dept(deptno,dname,loc) values(2,'Testing','CHICAGO');insert into dept(deptno,dname) values(3,'Marketing');drop table if exists emp;create table emp(  empno int primary key ,  ename char(10) not null,  deptno int,  hiredate date,  sal numeric(8, 2),  comm  numeric(8, 2) );insert into emp values(1,'Grace',1,'2000-12-02',12000.00,0);insert into emp values(2,'Joe',1,'2013-01-03',9100.00,0); insert into emp values(3,'John',2,'2021-02-10',8900.00,null); insert into emp values(4,'Lisa',2,'2022-12-1',11000.00,null);insert into emp values(5,'Ben',3,'2004-09-11',8000.00,9000.00); commit;

03

实验环境


课程中使用的4种数据库的客户端都是最流行的,也是数据库软件自带的客户端,无需单独安装。大家要看SQL语句前面的提示符就知道是哪种数据库里,这里我带大家熟悉一下4种数据库的客户端。MySQL数据库的客户端mysqlOracle数据库的客户端SQLPlusSQL Server数据库的客户端SSMS,这也是4个数据库客户端中唯一一个图形界面的客户端。PostgreSQL数据库的客户端psql



课程中会随机的在这4种数据库上面进行实验,同一个实验只会在一种数据库上面做一次,但是所有的SQL语句都是同时兼容这4种数据库的,大家花一份时间会得到4份的收获。Oracle数据库的语言设置




$ export NLS_LANG=american_america.AL32UTF8$ export LANG=zh_CN.UTF-8alter session set nls_date_format ='yyyy-mm-dd';

MySQL

使用MySQL自带的字符客户端mysql。


Oracle

使用Oracle自带的字符客户端sqlplus。


SQL Server

使微软提供的的SSMS(SQL Server Management Studio)。


PostgreSQL

使用PostgreSQL自带的字符客户端psql。



04

SQL简介


  1. 数据库

数据存放在数据库(database)中,数据库是数据的集合,它以一定的格式存放,可以方便地被访问。管理数据库的软件称之为数据库管理系统(database management system,简写成DBMS)。

用户向数据库管理系统(DBMS)发出查询或修改数据库的执行,DBMS在数据库上执行用户的指令并返回结果。

  1. SQL语言

数据库管理系统(DBMS)分为两类,一类是关系型数据库(retional),另一个是非关系数据库(non-relational也称为NoSQL)。

在关系数据库中,数据存放在表中,每个表存放特定类型对象的数据,例如:员工、经理、部门等。表与表之间通过关系进行联结,因此把这类数据库称之为关系数据库。SQL用于管理关系数据库中的数据。关系数据库包括MySQL、Oracle、SQL Server和PostgreSQL等。

在非关系数据库中,没有表和关系,这类数据库不使用SQL管理数据,它们有自己的数据库管理语言,这类数据库不属于这个课程的范畴。

SQL是用于访问和处理关系数据库的标准的计算机语言,SQL 是 Structured Query Language 的缩写,是指结构化查询语言。SQL发音有两种,一种是Squel,另一种是SQL。都是正确的。

SQL语言的特点:

  • 简单易学。
  • 功能强大。
  • 只说明要做什么,不说明如何做。
  • 标准化,几乎所有的关系数据库都通用。
  • 不区分大小写

本课程中的所有SQL语句均可不加修改地运行在MySQL、Oracle、SQL Server和PostgreSQL等4种数据库,实际上也可以不加修改地运行在几乎所有的数据库上。

05

创建表


Oracle中默认的日期格式可能不兼容,使用下面的命令修改:



SQL> alter session set nls_date_format ='yyyy-mm-dd';

或者在Linux上设置环境变量:


$ export NLS_DATE_FORMAT="yyyy-mm-dd"

创建部门表

下面的SQL语句创建部门表:



-- CREATE TABLEcreate table dept(  deptno  int primary key,  dname varchar(12) not null,  loc char(10));

在创建表之前加一个drop表的语句,是因为在整个课程的练习中会使用对数据进行修改,需要执行这些脚本将数据恢复到初始状态。


创建员工表


create table emp(  empno int primary key ,  ename char(10) not null,  deptno int,  hiredate date,  sal numeric(8, 2) ,  comm  numeric(8, 2) );

删除表使用


drop table emp;

drop table if exists dept;

常用数据类型

常用数据类型见下表:


数据类型<br> 说明<br>
int<br> 整数类型<br>
char(n)<br> 字符/字符串,固定长度n<br>
varchar(n)<br> 字符/字符串,可变长度,最大长度 n。<br>
numeric(a,b)<br> 精确数值,总位数a,小数点后位数b。<br>
date<br> 存储年、月、日的值

06

INSERT插入记录


insert语句用于向表中插入新记录,它有两种写法:第一种写法:为表中的所有字段添加值时不需要字段名称,但要确保值的顺序和个数与表中的字段顺序和个数一致,前面我们创建样本数据都是这种写法。语法如下:insert into 表名 values (字段1的值,字段2的值,字段3的值, ....);第二种写法:为指定的字段插入数据时,要把字段名和字段值都列出,并一一对应,语法如下:insert into 表名(字段1,字段2,字段3, ...) values (字段1的值,字段2的值,字段3的值, ....);为了后续的实验方便,我们造一些数据,使用insert向表中新增记录


-- the INSERT statementdesc deptinsert into dept values(1,'Development','NEW YORK');insert into dept(deptno,dname,loc) values(2,'Testing','CHICAGO');insert into dept(deptno,dname) values(3,'Marketing');

使用INSERT向表中增加记录的第一种写法是把每个字段值都写出来。







mysql> desc employees;+----------+--------------+------+-----+---------+-------+| Field    | Type         | Null | Key | Default | Extra |+----------+--------------+------+-----+---------+-------+| empno    | int          | NO   | PRI | NULL    |       || name     | char(10)     | NO   |     | NULL    |       || deptno   | int          | YES  |     | NULL    |       || email    | varchar(20)  | YES  |     | NULL    |       || hire_date | date         | YES  |     | NULL    |       || salary   | decimal(8,2) | YES  |     | 8000.00 |       |+----------+--------------+------+-----+---------+-------+6 rows in set (0.01 sec)-- 也可以用describe employees命令
mysql> insert into employees values(12,'刘国强',1,'liuguoqiang@qq.com','2010-04-12',11000.00);Query OK, 1 row affected (0.00 sec)

这个表有6个字段,这里列出了6个字段的值。如果字段数量或者类型不匹配,insert语句会失败,例如少了一个salary字段,或者字段类型错误。

为了后续的实验方便,我们造一些数据,使用insert向表中新增记录





-- 向员工表中插入记录insert into emp values(1,'Grace',1,'2000-12-02',12000.00,0);insert into emp values(2,'Joe',1,'2013-01-03',9100.00,0); insert into emp values(3,'John',2,'2021-02-10',8900.00,null); insert into emp values(4,'Lisa',2,'2022-12-1',11000.00,null);insert into emp values(5,'Ben',3,'2004-09-11',8000.00,9000.00);

我们把前面的脚本汇总起来在4中数据库上建立一个学习环境:

可以看到没有输入的字段都是NULL(空值),但工资是默认值,也可以用default关键字代替默认值。

插入多行(Oracle不支持)


insert into employees(empno,name) values(15,'曾国强'),(16,'aaa');d

批量插入




insert into job_history select * from job_history;select * from job_history;

(未完,请查看SQL语言(二))

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SQL 存储 数据库
爆肝!一看就懂的《SQL 语言知识体系》【建议收藏】(下)
爆肝!一看就懂的《SQL 语言知识体系》【建议收藏】
36 1
|
24天前
|
SQL 存储 关系型数据库
SQL语言优缺点有哪些?
SQL(Structured Query Language)语言作为数据库管理和操作的标准语言,具有一系列的优点,同时也存在一些缺点。
38 7
|
2月前
|
SQL 存储 数据库
爆肝!一看就懂的《SQL 语言知识体系》【建议收藏】(中)
爆肝!一看就懂的《SQL 语言知识体系》【建议收藏】
49 1
|
19天前
|
SQL 关系型数据库 数据库
|
19天前
|
SQL 关系型数据库 数据库
|
2天前
|
SQL 数据库 索引
SQL语言入门:如何表达你的数据需求
在数据库的世界里,SQL(Structured Query Language)是一种至关重要的语言,它允许用户与数据库进行交互,执行数据的查询、更新、插入和删除等操作
|
7天前
|
SQL 关系型数据库 MySQL
Go语言中进行MySQL预处理和SQL注入防护
在现代Web应用开发中,安全性至关重要。SQL注入是一种常见的攻击方式,攻击者可通过构造特殊SQL查询来非法访问或修改数据库数据。本文介绍如何利用Go语言中的预处理SQL语句来防范此类攻击。预处理不仅能提升安全性,还能提高性能并简化代码。通过使用`?`作为占位符,Go自动处理参数转义,有效避免SQL注入。此外,文章还提供了连接MySQL数据库、执行预处理查询以及最佳实践的示例代码。务必遵循这些指导原则,确保应用程序的安全性。
16 0
|
1月前
|
SQL 自然语言处理 关系型数据库
PolarDB自然语言到SQL语言转义
PolarDB自然语言到SQL语言转义
|
2月前
|
SQL 存储 数据库
爆肝!一看就懂的《SQL 语言知识体系》【建议收藏】(上)
爆肝!一看就懂的《SQL 语言知识体系》【建议收藏】
36 3
|
2月前
|
SQL Oracle 关系型数据库
技术经验解读:【读书笔记】SQL语言基础
技术经验解读:【读书笔记】SQL语言基础