这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战
大家好,我是【豆干花生】,这次我带来了一整套sql、mysql学习笔记,后续还会更新~
sql大家是很常用的数据库语言,但是对于初学者,往往不能系统的学习,所以我带来了一套完整笔记
今天我要分享第一周笔记,在本模块中,你将学习到select语句和其他常见语句、内置函数、数据表
这是我从头开始学习sql/mysql的学习笔记,后续还会更新,欢迎关注~
注:本笔记为coursera网站课程《Databases and SQL for Data Science with Python》的学习笔记
Welcome to Databases and SQL for Data Science with Python! You’re joining thousands of learners currently enrolled in the course. I'm excited to have you in the class and look forward to your contributions to the learning community.
学习目标
- 演示如何在SQL查询中使用字符串模式和范围
- 演示在结果集中使用groupng数据
- 演示如何对结果集进行排序和排序
- 演示如何编写子查询和嵌套选择
- 建立查询以访问多个表
Refining your Results
一.Using String Patterns and Ranges
进一步使用select语句
简单查询SELECT-FROM
用于无条件查询单张表中的行或列
select * from T_USER where u_name = '叶清逸' ;
查询一个或多个属性,u_name,u_age,u_score: select u_name,u_age,u_score from T_USER ;
AS关键字
使用AS给查询结果取别名(AS也可以省略): select u_name as 名字, u_age as "年龄" , u_score 成绩 from T_USER ;
算数运算符
SELECT中可以对数字和日期进行加减乘除运算 select u_name , u_score , u_score+10 , u_score-10 , u_score*2 , u_score/2 from T_USER ;
连接符 “||” SQL中的连接符”||” 可将结果连接起来为一列,将u_name 和“的成绩为” u_score 连接起来
select u_name || '的成绩为' || u_score as 成绩 from T_USER ;
条件查询SELECT-WHERE
SQL中可以用SELECT-WHERE进行条件查询
比较运算 ‘<’ ‘<=’ ‘>’ ‘>=’ ‘!=’
SQL中可以使用 条件运算符 ‘<’ ‘<=’ ‘>’ ‘>=’ ‘!=’ 过滤查询结果中的某些行,多个条件之间可以用 ‘and’ 连接。
查询T_USER表中成绩大于等于60分的学生
select u_name , u_score from T_USER where u_score >= 60 ;
与条件 (AND,BETWEEN)
查询A-B区间
查询T_USER表中成绩大于等于60分且小于等于80分的学生 AND写法 select u_name , u_score from T_USER where u_score >60 and u_score <80
BETWEEN写法 select u_name , u_score from T_USER where u_score between 60 and 80 ;
或条件(OR,IN)
SQL中用于或运算的关键字OR和IN
查询分数大于90分或者小于60分的记录-OR select u_name , u_score from T_USER where u_score >90 or u_score <60 ;
查询成绩为100,98,65的学生-IN
select u_name , u_score from T_USER where u_score in(100,98,65) ;
非条件(!=,NOT)
查询名字不叫 ‘叶清逸’ 的记录 !=写法 select * from T_USER where u_name != '叶清逸' ;
NOT写法 select * from T_USER where u_name not like '叶清逸' ;
模糊查询LIKE
SQL中可以使用模糊查询like,其中 ‘_’ 占一位 ‘%’占多位。
查询名字中有 ‘清’ 字的记录 可以有三种表示方式,结果等价 包含’清’: %清% 第二位为’清’:清% 倒数第二位为’清’:%清 select * from T_USER where u_name like '%清%' ;
注:若要查询数据含有’’ 关键字 则需使用 escape定义一个转义字符。如:like ‘%#%’ escape ‘#’
查询排序ORDER BY
SQL中可以对查询结果进行排序,DESC表示按从大到小排序,ASC表示按从小到大排序,默认为从小到大排序。
select * from T_USER order by u_score desc ;
ORDER BY 语句也可以用逗号隔开,表示如果上一个条件相同,接下来的排序方式。
二.Grouping Result Sets
1.distinct
distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。
select distinct name, id from A
2.group by
把表中的记录按照字段分成不同的组
select deptno,AVG(sal) from emp group by deptno#查找不同deptno的平均sal
group by a,b,c的用法:
先按照a分组,如果a相同,再按照b分组,如果b相同,再按照c分组。最终统计的是最小分组的信息。
3.count
统计
select count(name) from A;
select count(distinct name) from A; --COUNT和 DISTINCT 经常被合起来使用,表中name去重后的数目, SQL Server支持,而Access不支持 select count(distinct name, id) from A; --SQL Server和Access都不支持
SELECT Country, count(Country) FROM Author GROUP BY Country
三.Summary & Highlights
- 您可以使用WHERE子句来优化查询结果。
- 您可以使用通配符(%)替换模式中的未知字符。
- 您可以使用BETWEEN ... AND ...来指定数字范围。
- 您可以使用ORDER BY子句指定要进行排序的列,从而将查询结果按升序或降序排序。
- 您可以使用GROUP BY子句对查询结果进行分组。
Fouctions,Multiple Tables,and Sub-queries
一.Built-in Database Functions
大多数数据库都带有内置函数。 这些函数可以包含在SQL语句中,使您可以对 数据库本身中的数据。 使用数据库功能可以大大减少 需要从数据库中检索的数据量。
也可以创建自己的函数, 那是数据库中用户定义的函数;但这是一个更高级的话题。
SUM函数用于将一列中的所有值相加
SELECT SUM(id) FROM dgztc.user where id="";
MINimum用于获得最小值,MAXimum用于获得最大值
SELECT MIN(column_name) FROM table_name;
SELECT MAX(column_name) FROM table_name;
平均值(AVG)函数用于返回平均值或平均值
SELECT AVG(column_name) FROM table_name;
SELECT Customer FROM Orders WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders);
ROUND函数返回一个数值,舍入到指定的长度或精度
round() 遵循四舍五入把原值转化为指定小数位数,如:round(1.45,0) = 1;round(1.55,0)=2
二.Date and Time Built-in Functions
-
当前系统日期、时间 select getdate()
-
dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值 例如:向日期加上2天 select dateadd(day,2,'2004-10-15') --返回:2004-10-17 00:00:00.000
-
datename 返回代表指定日期的指定日期部分的字符串 select datename(weekday, '2004-10-15') --返回:星期五
-
day(), month(),year() --可以与datepart对照一下
DAY() 返回指定日期的日部分的整数 SELECT DAY(GETDATE())
MONTH() 返回指定日期的月部分的整数 SELECT MONTH(GETDATE())
YEAR() 返回指定日期的年部分的整数 SELECT YEAR (GETDATE())
-
函数 参数/功能
-
计算两个日期的差值
SELECT DATEDIFF(YY,'2008/1/1',GETDATE())
实践发现,getdate函数不存在,
原来是select GETDATE()是SQL server 的语句,SQL语句应该要写成select now()
三.Sub-Queries and Nested Selects
子查询或子选择类似于常规查询 但放在括号内 并嵌套在另一个查询中。
SELECT column_name [, column_name ]
FROM table1 [, table2 ]
WHERE column_name OPERATOR
(SELECT column_name [, column_name ]
FROM table1 [, table2 ]
WHERE condition);
例如,我们首先求得每一个学生的选课记录,然后取其平均值。然后要每个学生的每一门选课都和自己的平均成绩去比较,如果高出平均成绩就放入结果集。现在,给出SQL语句:
select Sno,Cno from tb_SC x
where Grade >(select AVG(Grade) from tb_SC y where x.Sno=y.sno)
我就发现了一个规律:什么时候使用相关子查询: 如果你想要使用一个表中的数据逐个和另一个表中的数据比较,这个时候可以使用相关子查询。就相当于二重for循环。
四.Working with Multiple Tables
学习如何编写查询 访问多个表。 有几种访问方式 同一查询中有多个表。
在实际的数据库应用中,我们经常需要从多个数据表中读取数据,这时我们就可以使用SQL语句中的连接(JOIN),在两个或多个数据表中查询数据。
JOIN 按照功能可分为如下三类:
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录; LEFT JOIN(左连接):获取左表中的所有记录,即使在右表没有对应匹配的记录; RIGHT JOIN(右连接):与 LEFT JOIN 相反,用于获取右表中的所有记录,即使左表没有对应匹配的记录。
完全外连接(full join 或 full outer join)完全外连接,查询的结果集包括SQL语句中左表和右表的所有行。如果某行在另一个表中没有匹配行时,则用空值表示。
我们使用 INNER JOIN(也可以省略 INNER 、直接使用 JOIN )来连接上面两张表命令如下:
select * from T_Person inner join T_Card on T_Person.CardId = T_Card.CardId;
LEFT JOIN 与 INNER JOIN 有所不同,LEFT JOIN 会读取左侧数据表的全部数据,即使右侧表中无对应数据。
select * from T_Person left join T_Card on T_Person.CardId = T_Card.CardId ;
RIGHT JOIN 会读取右侧数据表的全部数据,即便左侧表无对应数据。
select * from T_Person right join T_Card on T_Person.CardId = T_Card.CardId ;
完全外连接,查询的结果集包括SQL语句中左表和右表的所有行。如果某行在另一个表中没有匹配行时,则用空值表示。
查询语句:
select * from T_Person full join T_Card on T_Person.CardId = T_Card.CardId
查询结果:
五.Summary & Highlights
- 大多数数据库都带有内置函数,您可以在SQL语句中使用这些内置函数对数据库自身中的数据执行操作。
- 当使用大型数据集时,可以通过使用内置函数来节省时间,而不是先将数据检索到应用程序中,然后对检索到的数据执行函数。
- 您可以使用子查询来形成比其他查询更强大的查询。
- 您可以使用子选择表达式来评估一些内置的聚合函数,例如平均值函数。
- 派生表或表表达式是子查询,其中外部查询将子查询的结果用作数据源。
都看到这里了,不如点个赞哦~
初来掘金,我还有很多有趣的文章,后续都将搬运过来,欢迎关注哦~