SQL语言基础知识(一)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 这是从零开始系统学习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
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
在MySQL中,什么是结构化查询语言 (SQL)
【8月更文挑战第20天】在MySQL中,什么是结构化查询语言 (SQL)
61 1
|
1月前
|
SQL Oracle 关系型数据库
SQL语言的主要标准及其应用技巧
SQL(Structured Query Language)是数据库领域的标准语言,广泛应用于各种数据库管理系统(DBMS)中,如MySQL、Oracle、SQL Server等
|
1月前
|
SQL 关系型数据库 MySQL
Go语言项目高效对接SQL数据库:实践技巧与方法
在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
54 11
|
3月前
|
SQL 关系型数据库 MySQL
|
3月前
|
SQL 存储 大数据
SQL 语言发展史简直太震撼啦!从诞生到现代数据处理,见证一场奇妙的演变之旅,快来感受!
【8月更文挑战第31天】SQL(结构化查询语言)自20世纪70年代由IBM研究员E.F. Codd提出以来,已成为现代数据处理不可或缺的一部分。它最初简化了层次和网状模型中复杂的存储与检索问题,通过基本的SELECT、FROM和WHERE关键字实现了数据查询。80年代,SQL在商业数据库中广泛应用,引入了GROUP BY、HAVING和ORDER BY等功能,增强了数据分析能力。90年代,互联网和企业信息化推动了SQL的进一步优化与扩展,支持分布式数据库和数据仓库等技术。
47 0
|
3月前
|
SQL 存储 NoSQL
从SQL到NoSQL:理解不同数据库类型的选择与应用——深入比较数据模型、扩展性、查询语言、一致性和适用场景,为数据存储提供全面决策指南
【8月更文挑战第31天】在信息技术飞速发展的今天,数据库的选择至关重要。传统的SQL数据库因其稳定的事务性和强大的查询能力被广泛应用,而NoSQL数据库则凭借其灵活性和水平扩展性受到关注。本文对比了两种数据库类型的特点,帮助开发者根据应用场景做出合理选择。SQL数据库遵循关系模型,适合处理结构化数据和复杂查询;NoSQL数据库支持多种数据模型,适用于非结构化或半结构化数据。SQL数据库在一致性方面表现优异,但扩展性较差;NoSQL数据库则设计之初便考虑了水平扩展性。SQL使用成熟的SQL语言,NoSQL的查询语言更为灵活。
76 0
|
3月前
|
SQL 数据可视化 数据挖掘
SQL 在数据分析中简直太牛啦!从数据提取到可视化,带你领略强大数据库语言的神奇魅力!
【8月更文挑战第31天】在数据驱动时代,SQL(Structured Query Language)作为强大的数据库查询语言,在数据分析中扮演着关键角色。它不仅能够高效准确地提取所需数据,还能通过丰富的函数和操作符对数据进行清洗与转换,确保其适用于进一步分析。借助 SQL 的聚合、分组及排序功能,用户可以从多角度深入分析数据,为企业决策提供有力支持。尽管 SQL 本身不支持数据可视化,但其查询结果可轻松导出至 Excel、Python、R 等工具中进行可视化处理,帮助用户更直观地理解数据。掌握 SQL 可显著提升数据分析效率,助力挖掘数据价值。
68 0
|
3月前
|
SQL Java 数据库连接
|
3月前
|
SQL 数据库 索引
SQL语言入门:如何表达你的数据需求
在数据库的世界里,SQL(Structured Query Language)是一种至关重要的语言,它允许用户与数据库进行交互,执行数据的查询、更新、插入和删除等操作
|
3月前
|
SQL 关系型数据库 MySQL
Go语言中进行MySQL预处理和SQL注入防护
在现代Web应用开发中,安全性至关重要。SQL注入是一种常见的攻击方式,攻击者可通过构造特殊SQL查询来非法访问或修改数据库数据。本文介绍如何利用Go语言中的预处理SQL语句来防范此类攻击。预处理不仅能提升安全性,还能提高性能并简化代码。通过使用`?`作为占位符,Go自动处理参数转义,有效避免SQL注入。此外,文章还提供了连接MySQL数据库、执行预处理查询以及最佳实践的示例代码。务必遵循这些指导原则,确保应用程序的安全性。
99 0