失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > SQL基础入门知识

SQL基础入门知识

时间:2019-03-10 02:58:57

相关推荐

SQL基础入门知识

文章目录

前言一、SQL是什么?二、基本操作1.检索单列2.检索多列3.检索不同值4.限制结果5.排序检索数据6.指定排序方向7.过滤数据8.计算字段9.使用函数10.分组数据11.使用子查询12.联结表13.插入数据14.更新数据15.删除数据16.创建和操作表17.事务总结

前言


一、SQL是什么?

SQL是Structured Query Language(结构化查询语言)的缩写,是一种专门用来与数据库交互的语言。SQL不是某个特点数据库厂商专有的语言,大部分的DBMS(数据库管理系统)都支持SQL。但是不同的DBMS厂商会通过增加语句或指令来拓展SQL的功能。本文主要介绍ANSI SQL(由ANSI标准管理委员会管理的标准SQL),同时使用MySQL作为的DBMS,在使用到其特定的SQL时会进行说明。

二、基本操作

1.检索单列

输入:查询"products"表中"prod_name"列的所有信息。

SELECT prod_name FROM products;

输出

提示:多条SQL语句使用";"分隔,单条语句结束时可加可不加(建议加上)。SQL语句不区分大小写。

2.检索多列

输入:检索"products"表中"prod_id"、“prod_name”、"prod_price "三列的信息

SELECT prod_id,prod_name,prod_price FROM products;

输出:

说明:查询多列时使用","对不同列进行分隔。可以使用通配符(*)来代替实际列名返回表中的所有列。

SELECT * FROM products;


3.检索不同值

当在检索时不希望返回值重复出现时,可以使用DISTINCT关键字

输入

SELECT DISTINCT vend_id FROM products;

输出

注意:DISTINCT关键字作用于所有列。当你指定SELECT DISTINCT vend_id,prod_price时,会检索出“vend_id”,“prod_price”组合结果不同的结果集。

4.限制结果

当需要对检索结果的特定行进行输出时,可以使用LIMIT关键字。注意:LIMIT关键字是MySQL所特有的。

SELECT prod_name FROM products LIMIT 5 OFFSET 0;================================================简化语句:SELECT prod_name FROM products LIMIT 0,5;

输出

说明:LIMIT指定返回的行数。OFFSET指定从哪开始(第一个被检索的行是第0行)。使用简化语句时,LIMIT后逗号前后的两个数字值与OFFSET前后的值相反。

5.排序检索数据

为了明确地排序用SELECT语句检索出的数据,可使用ORDER BY子句。

输入

SELECT prod_name FROM products ORDER BY prod_name;

输出

注意:ORDER BY字句使用时应该保证它是SELECT语句中的最后一条子句。当需要按不同列进行排序时在ORDER BY后面用逗号(,)分隔列名即可;会按照顺序对前面的列进行排序,只有在前面的列相同时才会对下面的列进行排序。

6.指定排序方向

SQL中默认是升序排序(A到Z),可以通过ORDER BY子句进行降序排序。同时必须指定关键字DESC。

输入

SELECT prod_id,prod_name,prod_price FROM products ORDER BY prod_price DESC;

输出

注意:若需要在多个列上进行降序排序,必须对每一列指定DESC

7.过滤数据

当需要有选择的检索出表中对应行时,使用“WHERE”关键字

输入

SELECT prod_name,prod_priceFROM products WHERE prod_price = 3.49;

输出

WHERE子句操作符

说明:同时使用AND和OR时应用()对操作符进行明确的分组使用LIKE进行模糊查询时通配符的使用会影响性能,当必须使用时尽量不要将通配符放在最前面,否则效率将是最低的。

8.计算字段

拼接字段:使用concat(‘值1’,‘值2’…)使用别名:AS关键字

9.使用函数

常用函数介绍

AVG函数

输入

SELECT AVG(prod_price) AS avg_price FROM products;

输出

COUNT函数

输入

SELECT COUNT(*) AS num_cust FROM customers;

输出

说明:COUNT(*)会对表中行的数目进行统计,NULL也会统计使用COUNT(column)对特定行具有值的行数进行统计,会忽略NULL

10.分组数据

分组是使用SELECT语句中的GROUP BY子句建立的

输入

SELECT vend_id,COUNT(*) AS num_prods FROM products GROUP BY vend_id;

输出

说明:GROUP BY子句会指示DBMS分组数据,然后再对各个组进行聚集。

HAVING过滤分组

提示:HAVING和WHERE的差别是WHERE是在数据分组前进行的,而HAVING是在数组分组后进行的。

输入

SELECT cust_id,COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING COUNT(*) >= 2;

输出

11.使用子查询

MYSQL中允许将查询的结果作为另一个查询的过滤条件或计算字段

作为过滤条件输入

SELECT cust_name,cust_contact FROM customersWHERE cust_id IN (SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id = 'RGAN01'))

输出

12.联结表

当需要使用一条SQL语句查询出不同表中的数据时,可以使用联结表

输入

SELECT vend_name,prod_name,prod_price FROM vendors,products WHERE vendors.vend_id=products.vend_id;

输出

使用内联结

可以使用"INNER JOIN 表 ON 条件" 的形式来联结

输入

SELECT vend_name,prod_name,prod_price FROM vendors INNER JOIN products ON vendors.vend_id=products.vend_id;

输出

提示:使用联结时一定要给出联结条件,否则会得到笛卡尔积

13.插入数据

在表中添加数据时可以使用"INSERT INTO 表名 VALUES(值1,值2....)"插入部分列可以使用"INSERT INTO 表名(列名1,列名2...) VALUES(值1,值2....)"

14.更新数据

更新表中数据时使用UPDATE 表名 SET 列名1="数据1",列名2="数据2"... WHERE ...注意:不要忘记WHERE子句否则会更新表中所有行

15.删除数据

删除表中数据时使用DELETE FROM 表名 WHERE ...注意:不要忘记WHERE子句否则会删除表中所有行

16.创建和操作表

创建表语句CREATE TABLE 表名 (列名1 类型 约束 ,列名2 类型 约束 , ....);可以同时使用多个约束更新表可以使用"ALTER TBALE 表名 ADD 列名 类型 约束" 来新增一个字段"ALTER TBALE 表名 DROP COLUMN 列名"来删除一个字段

常用的约束

17.事务

使用事务处理(transaction processing),通过确保成批的SQL操作全部执行或全部不执行来维护数据库的完整性。术语:1.事务(transaction):指一组SQL语句2.回退(rollback):指撤销特定SQL语句的过程3.提交(commit):指将未存储的SQL语句结果写入数据库表中4.保留点(savepoint):指事务处理中设置的临时占位符,可以对它发布回退操作:BEGIN TRANSACTION:开启事务ROLLBACK:回退事务ROLLBACK TO delete:回退事务到保留点COMMIT TRANSACTION:提交事务事务的特性(ACID):1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。2、一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。3、隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。4、持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。

总结

以上是SQL的基础知识。

SQL脚本下载

参考文献:《SQL必知必会》

如果觉得《SQL基础入门知识》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。