SQL学习日记(1)
在之前给自己定了一个学习后端的任务,而正好下学期正好有SQL数据库的课程,那么在最近疫情大爆发的时候自己学习一下。经过两天的学习,我对SQL有了一些了解,最开始的感受需要记得命令行太多了,而语法上反而相对轻松一些。目前只学习到了sql的查询语言,具体修改数据库内数据的语言还没有涉及,那么下面就是我对这两天所学的查询语句的总结。
SQL语言(以MySQL为例,但学校教学应用的为SQL server)
现在进度:大致查询语言已经了解一部分了
- select….from…..;(查询语句中最主要的部分,啥都要select一下才能进行下一步的筛选,第一个…是要查询的字段,第二个….是查询的表)
- show databases;(展示所有的库)
- show tables;(主要展示现在的库中有哪些表)
- desc 表名;(显示表的结构,即一个表中有什么样的属性以及是否为空等)
- ues 库名;(主要用于切换不同的库)
- where语句(条件查询语句,主要是在其后面加入一些筛选条件,主要条件语句如下)
- like(一般与通配符组合使用,通配符:”%”[和任意多个字符匹配],“_”[和任意一个字符匹配])
- <>(!=) > < = and or <=> (安全=,可用于判断是否为null)
- is null(is not null)
- between…..and…
- in()(在括号里加入要选取的数据,比如where name in(‘小明’,‘小红’)这时会选取name为以上两种的行的数据)
- as(用于命名,可以省略)
- order by(用于排序,分为desc:降序,asc:升序,默认升序)
- 各种数学函数:
- avg()(平均值)
- max()
- min()
- count()(计数,count(*):全选计数)
- sum()
- round()(四舍五入)
- group by 字段(后面一般会加入一个字段,主要用于将数据分组,并返回一个分组之后的列表,分组的依据是字段中的属性相同的会被分到一起,比如:
group up job_id
即是job_id一样的被分到一组)
注意这里group by之后返回的是一个新的列表,也就是说如果想在对这个新返回来的列表进行记忆不得筛选的话where子句是无法做到的,所以也就引出了having子句,而having子句基本上也主要就是和group by搭配使用的
having(将group by返回的列表进一步筛选,功能与where类似。一般后面加新列表中的字段,其效率比where子句低,所以使用优先级应该为:where>having)
链接(顾名思义主要是实现两个或多个表之间的链接):
92语法:
1
2
3
4
5
6
7
8
9SELECT
e.job_id,
j.job_id,
e.last_name,
j.job_title
FROM
employees e,
jobs j
WHERE e.job_id = j.job_id ;由上面代码我们可以看到,说白了
就是给表重新表重新命名一下
用where语句筛选一下
这里筛选的时候要“.”一下,为的是区分e和j中相同的名字的字段,上面的select中也一样,当其中有同名字段时需要用表名区分一下
上述例子同样可以应用到三个甚至多个表的链接,同一个表中自己和自己的链接。
1
2
3
4
5
6
7
8
9
10
11SELECT
e.employee_id 受雇者id,
e.last_name 被雇佣者名字,
e.manager_id 受雇于,
m.employee_id 雇佣者id,
m.last_name 管理者名字,
e.employee_id 雇佣了
FROM
employees e,
employees m
WHERE e.manager_id = m.employee_id ;
99语法:
七种join的用法:
1
2
3
4
5
6
7
8
9SELECT
e.job_id,
j.job_id,
e.last_name,
j.job_title
FROM
employees e
[四种不同的类型] JOIN jobs j
ON j.job_id = e.job_id ;个人感觉没有92语法来的方便,但是他的的确确的提高了可读性
相比92语法主要的变化就是将原来的直接用where筛选的相等条件改为了
1
2
3from 字段
[类型]join 字段
on 条件这样的写法直接的将连接的筛选和普通的筛选区别开来,提高了可读性。
distinct(去重)
各种函数(部分):
- now()(去现在时间)
- year(),month(),day(),minute(),second()(取现在的年,月,日,分,秒)
- concat()(字符串链接)
- length()(取字节长度)
- datediff()(返回两个日期之间的天数)
- upper(),lower()(小写变大写,大写变小写)
这里附上我个人学习的途径: