javawhile语句的用法例子_SQL常用语句总结

来源:Medium编译:weakish

编者按:由于大量数据保存在关系数据库中,因此数据科学家难免要和SQL打交道。当然,面试的时候也常常考察SQL。Moratuwa大学生物信息学研究员Vijini Mallawaarachchi总结了常用的SQL语句用法,可供参考和温习。

本文总结了常用的SQL语句,尤其适合在面试前复习你的SQL知识。你可以尝试文中的例子,温习下你很久以前在数据库系统课程上学到的知识。

配置样例数据库

为了演示每个命令的用法,我们将使用一个样例数据库。生成该数据库的脚本可以从Google网盘下载:

  • DLL.sql: https://drive.google.com/file/d/0B_oq3-doZhC-ME1lUlR3a3pYRU0/view

  • InsertStatements.sql: https://drive.google.com/file/d/0B_oq3-doZhC-TV9ud1JubkVDaXM/view

如不便访问Google网盘,可以在论智公众号(ID: jqr_AI)留言sql recap获取。

下载文件后,输入以下命令进入MySQL控制台(假设你已经装好了MySQL或MariaDB)。

mysql -u root -p

mysql会提示你输入密码,输入安装配置MySQL服务时设置的密码即可。

输入如下命令生成样例数据库:

CREATE DATABASE university;

USE university;

SOURCE ;

SOURCE <InsertStatements.sql文件路径>;

好了,现在让我们开始温习SQL语句吧。

数据库

1. 查看现有数据库

SHOW DATABASES;

2. 新建数据库

CREATE DATABASE ;

3. 选择数据库

USE ;

4. 从.sql文件引入SQL语句

SOURCE <.sql>;

5. 删除数据库

DROP DATABASE ;

6. 查看当前数据库中的表

SHOW TABLES;

50ca79cb0b47d525b2df7e94baed762a.png

7. 创建新表

CREATE TABLE (

   1> 1>,

   2> 2>,

   3> 3>,

   PRIMARY KEY (1>),

   FOREIGN KEY (2>) REFERENCES 2>(2>)

);

主键(PRIMARY KEY)用来标识一条记录(一行),所以每条记录的主键值必须是唯一的。主键可以定义在多列上,这称为联合主键(composite primary key)

如果我们把表视作具有某种结构的数组(例如,C语言中的struct),那么外键(FOREIGN KEY)可以视作指针。

例子:

CREATE TABLE instructor (

   ID CHAR(5),

   name VARCHAR(20) NOT NULL,

   dept_name VARCHAR(20),

   salary NUMERIC(8,2),

   PRIMARY KEY (ID),

   FOREIGN KEY (dept_name) REFERENCES department(dept_name));

在上面的例子中,我们创建了一个教员(instructor)表,该表的主键是ID,外键是教员所在的部门名称(dept_name),关联部门(department)表。此外,教员表还包括姓名(name)、薪水(salary)。其中,姓名有约束NOT NULL,表示姓名这一项不能为空。

8. 概述表中的列

使用如下语句查看表中的列的基本信息:

DESCRIBE ;

下图显示了一些例子:

af51c9bab5ce618957596130cddf75da.png

9. 在表中插入新纪录

INSERT INTO (1>, 2>, 3>, …)

   VALUES (1>, 2>, 3>, …);

也可以省略列名(依序在所有列上插入新值):

INSERT INTO

   VALUES (1>, 2>, 3>, …);

10. 在表中更新记录

UPDATE

   SET 1> = 1>, 2> = 2>, ...

   WHERE ;

11. 清空表

DELETE FROM ;

12. 删除表

DROP TABLE ;

查询

13. SELECT

SELECT语句可以从表中选择数据:

SELECT 1>, 2>, …

   FROM ;

以下语句选择所有内容:

SELECT * FROM ;

cb8187a7658123c71eed90919c08c611.png

选中部门(department)表和课程(course)表中的所有内容

14. SELECT DISTINCT

SELECT DISTINCT过滤掉了重复的值:

SELECT DISTINCT 1>, 2>, …

   FROM ;

097c874896e3606d0af322aa357a575f.png

15. WHERE

我们之前在更新记录时已经用到了WHERE关键字,用来指明条件。这里我们稍微详细一点地介绍下WHERE

WHERE的条件通常是:

  • 比较文本(text)

  • 比较数字(numbers)

  • ANDORNOT等逻辑运算

让我们来看一些例子:

SELECT * FROM course WHERE dept_name='Comp. Sci.';

SELECT * FROM course WHERE credits>3;

SELECT * FROM course WHERE dept_name='Comp. Sci.' AND credits>3;

fa4ce23b891e889a2246cbcdea0c8ca3.png

16. GROUP BY

GROUP BY语句可以分组结果,常用于COUNTMAXMINSUMAVG聚合函数(aggregate functions)

SELECT 1>, 2>, …

   FROM

   GROUP BY ;

让我们来看一个例子,列出每个部门的课程数量:

SELECT COUNT(course_id), dept_name

    FROM course

    GROUP BY dept_name;

a1b2b938333939efa5c468f2daf2dc76.png

17. HAVING

乍看起来,HAVINGWHERE很像:

SELECT 1>, 2>, …

   FROM

   GROUP BY

   HAVING ;

那么,HAVINGWHERE有什么不同呢?让我们先来看一个例子,列出开了不止一门课程的部门开设的课程数:

SELECT COUNT(course_id), dept_name

   FROM course

   GROUP BY dept_name

   HAVING COUNT(course_id)>1;

这里HAVING不能换成WHERE,因为WHERE直接针对行操作,且在GROUP BY之前运行(即先通过WHERE筛选行,之后再将筛选出的行通过GROUP BY分组)。假设SQL中不存在HAVING语句,那么我们只能先新建一张表,将COUNT(course_id)作为新表的列,然后在新表上再通过WHERE进行筛选(当然,实际上SQL提供了派生表、CTE等机制,并不用真的手工建新表)。

ffaa7d4048dc688f3ecd25808b226cb7.png

18. ORDER BY

ORDER BY可以对结果进行排序,在没有明确指定ASC(升序)或DESC(降序)的情况下,默认按升序排列。

SELECT 1>, 2>, …

FROM

ORDER BY 1>, 2>, …, ASC|DESC;

例子:

SELECT * FROM course ORDER BY credits;

SELECT * FROM course ORDER BY credits DESC;

0d10526bddda0185c3d88d8ae04b69b3.png

19. BETWEEN

BETWEEN语句用于指定区间

SELECT 1>, 2>, …

   FROM

   WHERE BETWEEN 1> AND 2>;

其中“值”可能是数字,文本,乃至日期等。

例如,列出薪资在50000和100000之间的教员:

SELECT * FROM instructor

   WHERE salary BETWEEN 50000 AND 100000;

c9944ae84d40500d19ce2b56af6147ed.png

20. LIKE

LIKE用于匹配文本中的特定模式

SELECT 1>, 2>, …

   FROM

   WHERE LIKE ;

模式中可以使用以下两个通配符:

  • % (零个、一个或多个字符)

  • _ (单个字符)

例子:列出课程名中包含“to”的课程,以及课程ID以“CS-”开头的课程。

SELECT * FROM course WHERE title LIKE '%to%';

SELECT * FROM course WHERE course_id LIKE 'CS-___';

3f8d9084eb956b3cdd32a6d67e8d61b7.png

21. IN

IN语句表示值属于某个集合。

SELECT 1>, 2>, …

   FROM

   WHERE IN (1>, 2>, …);

例子:列出计算机科学、物理、电子工程部门的学生。

SELECT * FROM student

   WHERE dept_name IN ('Comp. Sci.', 'Physics', 'Elec. Eng.');

6852bbdc9909992862db8b9ad6e5628e.png

22. JOIN

JOIN用来组合两张以上表中的值。下图展示了JOIN的三种类型:

a8dc8a6ad019a0a3b6c5102cac2677c2.png

图片来源:zeroturnaround.com

SELECT 1>, 2>, …

   FROM 1>

   JOIN 2>

   ON 1.列名x> = 2.列名x>

让我们来看三个例子,分别对应三种JOIN的类型。

第一个例子,列出课程时包含开设课程的部门详情:

SELECT * FROM course

   JOIN department

   ON course.dept_name=department.dept_name;

a70a0c7cd024bd1b3d211dd44cc6c244.png

第二个例子,列出所有具有前置课程的课程的详情:

SELECT prereq.course_id, title, dept_name, credits, prereq_id

   FROM prereq

   LEFT OUTER JOIN course

   ON prereq.course_id=course.course_id;

ee426e9caddd37b7048923e18aecb15e.png

最后一个例子,列出所有课程的详情,不管是否具有前置课程:

SELECT course.course_id, title, dept_name, credits, prereq_id

   FROM prereq

   RIGHT OUTER JOIN course

   ON prereq.course_id=course.course_id;

488d750b276b3122be88bd2bc99c77c5.png

23. 视图

视图(view)是虚拟的SQL表。它包含行和列,和一般的SQL表格很类似。视图总是显示数据库中的最新数据。

CREATE VIEW

创建视图:

CREATE VIEW AS

   SELECT 1>, 2>, …

   FROM

   WHERE ;

DROP VIEW

删除视图:

DROP VIEW ;

例如,创建3学分的课程视图:

CREATE VIEW my_view AS

   SELECT * FROM course

   WHERE credits=3;

dd4ae862115a0e4c24657acc3b12a92e.png

24. 聚合函数

我们之前已经提到聚合函数,这里列出最常用的一些聚合函数:

  • COUNT(列名) 返回行数

  • SUM(列名) 返回指定列的值之和

  • AVG(列名) 返回指定列的平均值

  • MIN(列名) 返回指定列的最小值

  • MAX(列名) 返回指定列的最大值

25. 嵌套子查询

在SQL请求中,可以嵌套SELECT-FROM-WHERE表达式,称为嵌套子查询(nested subqueries)

例如,查找2009年秋、2010年春都开的课程:

SELECT DISTINCT course_id

   FROM section

   WHERE semester = ‘Fall’ AND year= 2009 AND course_id IN (

       SELECT course_id

           FROM section

           WHERE semester = ‘Spring’ AND year= 2010

   );

91a315286d33c6f4fb2f0298ba5d62ad.png

推 荐关 注

5e443664b8dd8316779f069eb45f6fb4.png

第一部分、 基础 1、创建数据库 2、删除数据库 3、备份sql server 4、创建新表 5、删除新表 6、增加一个列 7、添加和删除主键 8、索引 9、视图 10、几个简单的基本的sql语句 11、几个高级查询运算词 12、使用外连接 13、分组:Group by: 14、对数据库进行操作: 15.如何修改数据库的名称: 第二部分、 提升 1、复制表 2、拷贝表 3、跨数据库之间表的拷贝 4、子查询 5、显示文章、提交人和最后回复时间 6、外连接查询 7、在线视图查询 8、between的用法 9、in 的使用方法 10、两张关联表,删除主表中已经在副表中没有的信息 11、四表联查问题 12、日程安排提前五分钟提醒 13、一条sql 语句搞定数据库分页 14、前10条记录 15、选择每组中的最大数 第三部分、 技巧 1、True/False的使用 2、收缩数据库 3、压缩数据库 dbcc shrinkdatabase(dbname) 4、转移数据库给新用户以已存在用户权限 5、检查备份集 6、修复数据库 7、日志清除 8、更改某个表 9、存储更改全部表 10、SQL SERVER中直接循环写入数据 数据开发-经典 1.按姓氏笔画排序 2.数据库加密 3.取回表中字段 4.查看硬盘分区 5.比较A,B表是否相等 6.杀掉所有的事件探察器进程 7.记录搜索: 9:获取当前数据库中的所有用户表 10:获取某一个表的所有字段 11:查看与某一个表相关的视图、存储过程、函数 12:查看当前数据库中所有存储过程 13:查询用户创建的所有数据库 14:查询某一个表的字段和数据类型 15:不同服务器数据库之间的数据操作 SQL Server基本函数 SQLServer2000同步复制技术实现步骤 一、 预备工作 二、 正式配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值