SQL基础入门

壮心未与年俱老,死去犹能作鬼雄。这篇文章主要讲述SQL基础入门相关的知识,希望能为你提供帮助。
体验简介本实验提供一台基础环境为CentOS的ECS(云服务器)实例,点击体验。
我们将会在这台服务器上安装mysql,然后学习基本的SQL语句。
体验此场景后,可以掌握的知识有:

  1. MySQL安装。
  2. 基本SQL语句的使用。
背景知识
  • SQL:
结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
  • 数据查询语言(Data Query Language,简称DQL):其语句也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE、ORDER BY、GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。
  • 数据操作语言(DML:Data Manipulation Language):其语句包括动词INSERT、UPDATE和DELETE。它们分别用于添加、修改和删除。
  • 事务控制语言(TCL):它的语句能确保被DML语句影响的表的所有行及时得以更新。包括COMMIT(提交)命令、SAVEPOINT(保存点)命令、ROLLBACK(回滚)命令。
  • 数据控制语言(DCL):它的语句通过GRANT或REVOKE实现权限控制,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
  • 数据定义语言(DDL):其语句包括动词CREATE、ALTER和DROP。DDL语句用于在数据库中创建新表、修改、删除表(CREATE TABLE或DROP TABLE)、为表加入索引等。
  • 指针控制语言(CCL):它的语句包括DECLARE CURSOR、FETCH INTO和UPDATE WHERE CURRENT,用于对一个或多个表单独行的操作。
  • 云服务器ECS:
云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备,让您像使用水、电、天然气等公共资源一样便捷、高效地使用服务器,实现计算资源的即开即用和弹性伸缩。阿里云ECS持续提供创新型服务器,解决多种业务需求,助力您的业务发展。
安装并配置MySQL\\1. 依次执行如下命令,下载并安装MySQL。
wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm yum -y install mysql57-community-release-el7-10.noarch.rpm yum -y install mysql-community-server --nogpgcheck

返回如下结果,表示MySQL安装成功。
SQL基础入门

文章图片

\\2. 执行如下命令,启动MySQL 数据库。
systemctl start mysqld.service

\\3. 执行如下命令,查看MySQL运行状态。
systemctl status mysqld.service

返回如下结果,表示MySQL正常运行。
SQL基础入门

文章图片

\\4. 执行如下命令,查看MySQL初始密码。
grep "password" /var/log/mysqld.log

返回如下结果。
SQL基础入门

文章图片

\\5. 执行如下命令,登录数据库。
mysql -uroot -p

返回如下结果,输入MySQL初始密码。
SQL基础入门

文章图片

返回如下结果,表示登录成功。
SQL基础入门

文章图片

\\6. 执行如下命令,修改MySQL默认密码。
说明
  • 您需要将下面命令中的NewPassWord1.修改为您要设置的数据库密码。
  • 设置的新密码必须同时包含大小写英文字母、数字和特殊符号中的三类字符,否则会因为密码过于简单报错。
  • 注意每条完整的SQL命令结尾都有一个半角分号(; ),如果多行命令中间没有分号分隔,这些命令将不会执行,直至遇到一个分号。
ALTER USER root@localhost IDENTIFIED BY NewPassWord1.;

SQL基础入门

文章图片

\\7. 依次执行如下命令,退出MySql重新登录。
exit mysql -uroot -p

SQL基础入门

文章图片

创建数据库和创建数据表\\1. 使用create命令创建数据库,语法如下:
create DATABASE 数据库名;

执行如下命令,创建数据库Test。
create DATABASE Test;

SQL基础入门

文章图片

\\2. 执行如下命令,查看当前数据库列表,即可看到创建的Test数据库。
show databases;

SQL基础入门

文章图片

\\3. 执行如下命令,连接Test数据库。
说明
执行如下命令后,您就已经成功选择了Test数据库,您的后续所有操作都会在Test数据库中执行。
use Test;

SQL基础入门

文章图片

\\4. 创建MySQL数据表。
创建MySQL数据表时需要以下相关信息:
  • 表名。
  • 表字段名。
  • 定义每个表字段。
创建数据表的SQL通用语法:
CREATE TABLE table_name(column_name column_type);

执行如下命令,在Test数据库中创建数据表web。
CREATE TABLE `web` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` char(20) NOT NULL DEFAULTCOMMENT 站点名称, `url` varchar(255) NOT NULL DEFAULT , `rank` int(11) NOT NULL DEFAULT 0 COMMENT 排名, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

SQL基础入门

文章图片

\\5. 执行如下命令,查看数据库Test下的所有数据表。
show tables;

SQL基础入门

文章图片

SQL的增删改查\\1. 使用INSERT INTO语句。
INSERT INTO语句用于向表中插入新记录。INSERT INTO语句可以有两种编写形式。
第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:
INSERT INTO table_name VALUES (value1,value2,value3,...);

第二种形式需要指定列名及被插入的值:
INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...);

执行如下命令,向web表中插入五条数据。
INSERT INTO `web` VALUES (1, 阿里云, https://www.aliyun.com/,123), (2, 淘宝, https://www.taobao.com/,1), (3, 帮助中心, https://help.aliyun.com/,112), (4, 开发者社区, https://developer.aliyun.com/,213), (5, 体验实验室, https://developer.aliyun.com/adc/labs/,456);

SQL基础入门

文章图片

\\2. 使用SELECT语句。
SELECT语句用于从数据库中选取数据,并将选取的数据存储在一个结果表中,称为结果集。SQL的SELECT语法如下。
第一种形式语法如下,表示从表(table_name)中查询某些字段(column_name)。
SELECT column_name,column_name FROM table_name;

第二种形式语法如下,表示从表(table_name)中查询所有字段。
SELECT * FROM table_name;

a. 执行如下命令,从" web" 表中查询" name" 和" url" 列。
SELECT name,url FROM web;

返回结果如下。
SQL基础入门

文章图片

b. 执行如下命令,从" web" 表中查询所有的列。
SELECT * FROM web;

返回结果如下。
SQL基础入门

文章图片

\\3. 使用UPDATE语句。
UPDATE语句用于更新表中已存在的记录。SQL的UPDATE语法如下,表示在表(table_name)中,如果某列(some_column)取值为特定值(some_value),则将column更新成value。
UPDATE table_name SET column1=value1,column2=value2,... WHERE some_column=some_value;

注意:
使用UPDATE语句时请注意设置WHERE子句。如果您省略了WHERE子句,会将数据表中所有的数据都更新。
执行如下命令,把name为" 阿里云" 的数据的rank更新为5。
UPDATE web SET rank=5 WHERE name=阿里云;

SQL基础入门

文章图片

b. 执行如下命令,查询所有数据。
SELECT * FROM web;

返回结果如下,您可以看到数据已经被更新。
SQL基础入门

文章图片

\\4. 使用DELETE语句。
DELETE语句用于删除表中的行。SQL的DELETE语法如下。
DELETE FROM table_name WHERE some_column=some_value;

注意:
WHERE子句规定哪条记录或者哪些记录需要删除。如果您省略了WHERE子句,所有的记录都将被删除!
a. 执行如下SQL语句,向web表中插入一条数据。
INSERT INTO web(name, url, rank) VALUES (新手入门,https://help.aliyun.com/learn/getting-started.html,789);

SQL基础入门

文章图片

b. 执行如下SQL语句,查询所有数据,您可以看到新增的数据。
select * from web;

SQL基础入门

文章图片

c. 执行如下SQL语句,从web表中删除name为新手入门的数据。
DELETE FROM web WHERE name=新手入门;

SQL基础入门

文章图片

d. 执行如下SQL语句,查询所有数据,您可以看到数据已经删除。
select * from web;

SQL基础入门

文章图片

SQL的AND和OR运算符AND和OR运算符用于基于一个以上的条件对记录进行过滤。
\\1. 使用AND运算符。
如果第一个条件和第二个条件都成立,则AND运算符显示一条记录。
执行如下SQL语句,从web表中选取id为1且rank大于2的数据:
SELECT * FROM web WHERE id= 1 AND rank > 2;

返回的结果如下。
SQL基础入门

文章图片

\\2. 使用OR运算符。
如果第一个条件和第二个条件中只要有一个成立,则OR运算符显示一条记录。
执行如下SQL语句,从web表中选取rank大于300的或name为阿里云的数据:
SELECT * FROM web WHERE rank > 300 OR name = 阿里云;

返回的结果如下。
SQL基础入门

文章图片

SQL的ORDER BY关键字ORDER BY关键字用于对结果集按照一个列或者多个列进行排序。
ORDER BY关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用DESC关键字。ORDER BY语法如下。
SELECT column_name,column_name FROM table_name ORDER BY column_name,column_name ASC|DESC;

\\1. 使用ORDER BY。
执行如下SQL语句,从web表中选取所有数据,并按照rank列排序。
SELECT * FROM web ORDER BY rank;

返回结果如下。
SQL基础入门

文章图片

\\2. 使用ORDER BY DESC。
执行如下SQL语句,从web表中选取所有数据,并按照rank列降序排序。
SELECT * FROM web ORDER BY rank DESC;

返回结果如下。
SQL基础入门

文章图片

\\3. 使用ORDER BY多列。
执行如下SQL语句,查询web表中选取所有数据,并按照rank列降序排序。
SELECT * FROM web ORDER BY name,rank;

返回结果如下。
SQL基础入门

文章图片

SQL函数说明\\1. 使用AVG()函数。
AVG()函数返回数值列的平均值。AVG()语法如下。
SELECT AVG(column_name) FROM table_name
SELECT AVG(column_name) FROM table_name;

a. 执行如下SQL语句,在Test数据库中创建数据表access_log。
CREATE TABLE `access_log` ( `aid` int(11) NOT NULL AUTO_INCREMENT, `site_id` int(11) NOT NULL DEFAULT 0 COMMENT 网站id, `count` int(11) NOT NULL DEFAULT 0 COMMENT 访问次数, `date` date NOT NULL, PRIMARY KEY (`aid`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

b. 执行如下SQL语句,向数据表access_log插入数据。
INSERT INTO `access_log` VALUES (1, 1, 45, 2016-05-10), (2, 3, 100, 2016-05-13), (3, 1, 230, 2016-05-14), (4, 2, 10, 2016-05-14), (5, 5, 205, 2016-05-14), (6, 4, 13, 2016-05-15), (7, 3, 220, 2016-05-15), (8, 5, 545, 2016-05-16), (9, 3, 201, 2016-05-17);

c. 执行如下SQL语句,从access_log数据表的count列获取平均值。
SELECT AVG(count) AS CountAverage FROM access_log;

返回结果如下。
SQL基础入门

文章图片

\\2. 使用COUNT()函数 。
COUNT()函数返回匹配指定条件的行数。COUNT()函数有三种语法,如下所示。
COUNT(column_name)语法 :COUNT(column_name)函数返回指定列的值的数目(NULL不计入)。
SELECT COUNT(column_name) FROM table_name;

COUNT() 语法 COUNT() :函数返回表中的记录数。
SELECT COUNT(*) FROM table_name;

COUNT(DISTINCT column_name)语法 :COUNT(DISTINCT column_name)函数返回指定列的不同值的数目 。
SELECT COUNT(DISTINCT column_name) FROM table_name;

测试方法如下:
a. 执行如下SQL语句,计算access_log数据表中site_id=3的总访问量。
SELECT COUNT(count) AS nums FROM access_log WHERE site_id=3;

返回结果如下。
SQL基础入门

文章图片

b. 执行如下SQL语句,计算access_log数据表中总记录数。
SELECT COUNT(*) AS nums FROM access_log;

返回结果如下。
SQL基础入门

文章图片

c. 执行如下SQL语句,计算access_log数据表中不同site_id的记录数。
SELECT COUNT(DISTINCT site_id) AS nums FROM access_log;

返回结果如下。
SQL基础入门

文章图片

\\3. 使用MAX()函数 。
MAX()函数返回指定列的最大值。MAX()语法 如下。
SELECT MAX(column_name) FROM table_name;

执行如下SQL语句,获取web数据表中rank列的最大值。
SELECT MAX(rank) AS max_rank FROM web;

SQL基础入门

文章图片

\\4. 使用MIN()函数 。
MIN()函数返回指定列的最小值。MIN()语法 如下。
SELECT MIN(column_name) FROM table_name;

执行如下SQL语句,获取web数据表中rank列的最小值。
SELECT MIN(rank) AS min_rank FROM web;

返回结果如下。
SQL基础入门

文章图片

\\5. 使用SUM()函数 。
SUM()函数返回数值列的总数。SUM()语法 如下。
SELECT SUM(column_name) FROM table_name。

执行如下SQL语句,获取access_log数据表的count字段的总数。
SELECT SUM(count) AS nums FROM access_log;

SQL基础入门

文章图片

\\6. 使用GROUP BY语句。
GROUP BY语句用于结合聚合函数,根据一个或多个列对结果集进行分组。GROUP BY语法如下。
SELECT column_name, aggregate_function(column_name)FROM table_name WHERE column_name operator value GROUP BY column_name;

执行如下SQL语句,获取access_log数据表各个site_id的访问量。
SELECT site_id, SUM(access_log.count) AS nums FROM access_log GROUP BY site_id;

SQL基础入门

文章图片

\\7. 使用EXISTS运算符。
EXISTS运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回False。EXISTS语法 如下。
SELECT column_name(s) FROM table_nameWHERE EXISTS (SELECT column_name FROM table_name WHERE condition);

执行如下SQL语句,查找查找count字段大于200的网站是否存在。
SELECT web.name, web.url FROM web WHERE EXISTS (SELECT count FROM access_log WHERE web.id = access_log.site_id AND count > 200);

【SQL基础入门】
SQL基础入门

文章图片


    推荐阅读