当前位置: 首页 > news >正文

SQL入门教程

目录:

一、为什么是sql
二、概述及单表查询
三、三步搞定安装配置及导入
四,练习题及答案
五、多表查询
六、注意事项

一、为什么是sql

你是一个普普通通的人力,每天面对的就是一张张的员工信息表

做一些简单的统计工作,大部分的工作只是简单的表格处理,甚至连宏都不需要,虽然有时候需要用一些笨方法,但是工作还是可以完成的。

但是突然有一天,你的老板突发奇想,觉得员工入职的都是好日子,打算只要员工入职了就去买股票去,然后扔给了你了一个表格,里面有着20年的股票数据,让你去算一下只要员工入职了就去买股票,当天是涨的多还是跌的多

你要怎么办,你只能无奈的去翻找每个员工入职的日子,然后再去看看当天的股票是不是开盘,然后再算出来是涨还是跌。当然了,如果是一个Excel高手,会使用复杂的宏操作,也是可以通过编写宏来实现自动查询的,但作为一个普通打工者,学习宏显然并不如用笨办法去查询一下了。

但是,如果你会操作数据库,只需要三行代码,这个问题就解决了,两个表格就合并为一个表格了。

只需要四行代码,结果也都统计出来了。

最关键的是,这是通过两个小时学习,只需要掌握10个命令就可以做到的程度。也是我写这个教程的初衷,

UP不是程序员,只是在11月才接触到数据库,然后简单学了下发现可以很方便的实现很多的功能,但是看的视频都是教给想要做程序员的,讲的内容都是无比的复杂,如果不是程序员根本就没必要了解,于是就产生了这个想法,我们一个普通的人,只是为了工作方便学习一下数据库其实可以做到很简单的,只要掌握一些固定的句式,完全可以很快的入手,就当是给Excel加上了一个外挂而已了,我们又不要去做程序员。

二、概述及单表查询

数据库的查询只需要四行,不管是任何的查询,只要按照顺序写四行就可以了,当然了,每次查询都写四行,可能排版上不好看,为了更好看我们会分个段,但那只是浏览效果,从内容上还是只有四行。

第一行 查询内容 SELECT, 
第二行 数据来源 FROM,INNER JOIN 
第三行 查询条件 WHERE
第三行 输出形式 GROUP BY,ORDER BY,LIMIT

是的,只有7个关键词,记住这7个词就可以开始干活了。

下面结合具体案例说说用法,首先记住这张表,所有的内容都在这里了。

##查询内容
SELECT *字段1 别名1,字段2 别名2,字段3 别名3DISTINCT(去重) 字段列表COUNT(字段列表),MAX(), MIN(),AVG(),SUM()
#SELECT后可以跟两种内容,第一种是具体需要查询的字段名称,第二种就是函数,这里列举最常用的五个函数#COUNT(计数),MAX(求最大值),MIN(求最小值),AVG(求平均值),SUM*求和##数据来源
FROM 主表名 别名
INNER JOIN 附表名 别名 ON 加入条件##查询条件
WHERE  >,  =,<, !=, BETWEEN...AND...,  IN(...),  LIKE(%,__), IS NULL   AND,  OR,  NOT
#大于,等于,小于,不等于
#在某个范围之内(含最小,最大),在In之后的列表中的值,模糊匹配,是NULL                                       
#并且(多个条件同时成立),或者(多个条件任意一个成立),非(不是)##输出形式
#分组查询    
GROUP BY  分组字段名   排序方式(ASC升序,默认值  DESC降序)      HAVING 分组后过滤条件
#排序查询     
ORDER BY   
#分页查询     
LIMIT  起始索引(从0开始),查询记录数 

回到前面提到的员工信息表的表格了,我们针对这种表格来操作一下。

首先说明:用到的所有的符号都是英文状态下的符号

我把这个表格导入到了数据库以后

1、查看一下所有的内容

#此处的*就代表所有的字段内容,用来查询全部
SELECT *
FROM 员工信息表

2、查询指定字段name,workno,age

#字段就是一个表格的表头了,想要查询什么内容就输入表头,多个表头之间用','分割开就好SELECT name,workno,age
FROM 员工信息表

3、在这个表格里,表头是英文的,我想要给别人展示的时候是中文展示,查询所有员工的工作地址,起一个中文别名进行展示

#在字段后输入空格,然后再空格后直接输入的内容就是给当前字段起了一个别名,后期可以用别名来代替该字段SELECT workaddress 工作地址
FROM 员工信息表

4、以上查询中结果是有重复的,现在需要去重展示工作地址

#DISTINCT去重关键词,使用时直接放在字段前面即可SELECT DISTINCT workaddress 工作地址
FROM 员工信息表

5、统计该企业员工数量

#COUNT表示计数,此处可以用*表示对整个表格计数,也可以指定具体字段,表示统计该字段的数量SELECT COUNT(*)
FROM 员工信息表

6、统计该企业的平均年龄

#AVG表示平均数,统计哪里的数据()内填入字段即可,同理SUM,MAX,MIN同样的用法SELECT AVG(age)
FROM 员工信息表

以上就是数据库查询前两行的内容,现在我们加入第三行,这一行可以加入查询条件了。

7、查询年龄为88岁的员工

# = 没有什么好说的,两边相等,除了表示数字相等,还可用来表示字符串,但表字符串的时候需要加''引号,后续有案例。SELECT *
FROM 员工信息表
WHERE age = 88

8、查询年龄小于20的员工信息

#<小于,<=小于等于,>大于,>=大于等于,!=不等于,一看就懂SELECT *
FROM 员工信息表
WHERE age < 20

9、原表格中有一些人没有身份证号,找出他们来

#NULL代表空的意思,IS NULL就是这里是空的意思,IS NOT NULL就是这里不是空了SELECT *
FROM 员工信息表
WHERE idcard is null

10、查询年龄在15岁(包含)到22岁(包含)之间的员工信息

#BETTEN...AND..表示一个范围,输入范围的两端即可,当然次数也可以用>=...AND
#当然此处可以用AND,表达为:age >= 15 AND age <= 22SELECT *
FROM 员工信息表
WHERE age BETWEEN 15 and 22

11、查询年龄等于18或20或40的员工信息

#BETWEEN...AND...是一个范围内区间,包含区间内的所有,而IN是明确指定范围,()内的内容就是指定好的范围
#此处可以用or,表示为:age = 18 or age = 20 or age = 40SELECT *
FROM 员工信息表
WHERE age in (18,20,40)

12,查询性别为女且年龄小于25岁的员工

#AND就是并列,多个条件同时满足,OR就是多个条件满足一个即可
# = 后是一个字符,这里的女要加上''SELECT *
FROM 员工信息表
WHERE age <= 25 and gender = '女'

13、查询姓名为两个字的员工信息

#LIKE表示模糊查询的意思,有两种形式,第一个是_(下划线),每个_表示一个字符。第二个是%,不特指定位数SELECT *
FROM 员工信息表
WHERE name LIKE'__'

14、查询身份证号最后一位是X的员工信息

#此处演示的就是%的用法,%表示不特定位数,这里表示巡查结尾是X,前面位数不指定SELECT *
FROM 员工信息表
WHERE idcard LIKE'%X'

15、统计下上海地区员工的年龄之和

#此处就是第一行的内容的组合,字段和函数是可以同时使用的,只要用','分隔开即可SELECT SUM(age)
FROM 员工信息表
WHERE workaddress = '上海'

前三行讲完了,现在开始进入最后一行。像上一个例子,只是输出了一个结果201,但是展示上并不直观,为了方便的展示出来,我们就需要一些展示形式。

16、根据性别分组,统计男性员工和女性员工的平均年龄。

#GROUP BY分组展示,是对查询的结果进行展示,此处我们想展示一性别为分组的结果SELECT gender,AVG(age)
FROM 员工信息表
GROUP BY gender

17、查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址。

#HAVING是对查询的结果进行再次查询的意思
#首先是条件查询年龄小于45岁,然后通过COUNT统计出来员工的数量
#然后HAVING对COUNT统计数来的结果在进行查询,找到大于等于3的结果进行展示。SELECT workaddress,COUNT(*)
FROM 员工信息表
WHERE age <= 45 
GROUP BY workaddress  
HAVING COUNT(*) >= 3

18、根据年龄对公司的员工进行升序排序

#ORDER BY排序展示,是对表格进行操作,对内容进行排序展示,而GROUP BY是对查询结果进行展示
#ORDER BY默认是升序排序,如果需要降序培训可以在字段后加DESC,如本案例age DESC 则表示对年龄进行降序排序SELECT *
FROM 员工信息表
ORDER BY age 

19、查询第一页员工数据,每页展示10条记录

#LIMIT用来展示数量,关键词后跟两个数字,第一个表示从第几个数据开始展示,第二个表示每页展示多少数据。
#LIMIT的展示是从0开始,所以从第一页开始展示是0SELECT *
FROM 员工信息表
LIMIT 0,10

以上,就是单表查询需要的所有的关键词,不知道这么写有没有看懂呢,当然了这只是最粗糙的展示,每个关键词还是有一些细节的。

如果看了最开始的例子你对sql有了兴趣,看了第二部分的介绍你觉得数据库好像并不是很难,也想要自己尝试一下了,那就进入第三部分吧。

三、三步搞定安装配置及导入

1、安装软件。我们不是为了做程序员的,我们就是为了工作方便,所以软件上建议不要选最专业的,以界面简单好操作,够用就行的原则。推荐Navicat。这里给个链接,可以直接下载下来安装就好了。因为一些众所周知的原因,安装好了以后进入界面如果提示升级的话,看好了版本,本软件是第12版,如果是提示更新12版,可以升级,如果是提示升级到最新版那就一定不要升级了。

Navicat​ddns.weisizheng.com:8888/s/22thxb

2、申请一个数据库服务器。

数据库的内容是要有一个服务器来存储的,可以自己部署服务器,也可以用本机作为服务器,但也需要自己部署,不推荐初学者使用,作为初学我们就是有现成的免费的可以用就直接使用就好了。

这里推荐一个网站:SQLask - 免费的MySQL数据库

看上去像是给这个网站再打广告,但是确实没有找到更傻瓜的网站,输入数据库名字和用户名,建议英文了,然后直接申请就可以。

注意:这个网站点了申请以后出来结果马上截屏保存,他这个内容只展示一次,如果没有保存到,就浪费了,必须从新申请了,没办法找回。

3、用下载安装好的Navicat链接这个网站申请的服务器即可。

打开软件点击链接,然后点击MYSQL

把自己申请好的服务器信息填写进去即可,然后点击确认,服务器就连接好了。

如果你想要创建自己的数据也很简单,申请了服务器以后,在表那里右键选择导入向导

选择你的Excel文件,连续点击下一步都用默认设置

这里点击开始

再点击开始,一张属于自己的数据表格就生成了

打开数据表以后点击新建查询就可以开始操作了

四、练习及答案

我已经把我操作的内容放在了这个服务器上了,如果你感兴趣现在就可以连接到本服务器上自己去练习了。

我把题目汇总到了下面,并且把答案也附在了下面,现在就开始练习吧。

如果练习了以后你觉得有兴趣那就继续往下看吧。

● 1、查询指定字段name,workno,age
● 2、查询所有字段
● 3、查询所有员工的工作地址,起别名
● 4,、查询公司员工的上班地址(不要重复)
● 5、查询年龄等于88的员工
● 6、查询年龄小于20的员工信息
● 7、查询年龄小于等于20的员工信息
● 8、查询没有身份证号的员工信息
● 9、查询有身份证号的员工信息
● 10、查询年龄不等于88的员工信息
● 11、查询年龄在15岁(包含)到20岁(包含)之间的员工信息
● 12、查询性别为女且年龄小于25岁的员工信息
● 13、查询年龄等于18或20或40的员工信息
● 14、查询姓名为两个字的员工信息
● 15、查询身份证号最后一位是X的员工信息
● 16、统计该企业员工数量
● 17、统计该企业员工的平均年龄
● 18、统计该企业员工的最小年龄
● 19、统计上海地区员工的年龄之和
● 20、根据性别分组,统计男性员工和女性员工的数量
● 21、根据性别分组,统计男性员工和女性员工的平均年龄。
● 22、查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址。
● 23、根据年龄对公司的员工进行升序排序
● 24、根据入职时间,对员工进行降序排序
● 25、根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序
● 26、查询第一页员工数据,每页展示10条记录
● 27、查询第二页员工数据,每页展示10条记录
● 28、查询年龄为20,21,22,23岁的女性员工信息
● 29,查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工
● 30,统计员工表中,年龄小于60岁的,男性员工和女性员工的人数
● 31,查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序
● 32,查询性别为男,且年龄在20-40岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序

答案:

案例答案
● 1、查询指定字段name,workno,age

SELECT name,workno,age
FROM 员工信息表

● 2、查询所有字段

SELECT *
FROM 员工信息表

● 3、查询所有员工的工作地址,起别名

SELECT workaddress 工作地址
FROM 员工信息表

● 4,、查询公司员工的上班地址(不要重复)

SELECT DISTINCT workaddress 工作地址
FROM 员工信息表

● 5、查询年龄等于88的员工

 SELECT *
FROM 员工信息表
WHERE age = 88

● 6、查询年龄小于20的员工信息

SELECT *
FROM 员工信息表
WHERE age < 20


● 7、查询年龄小于等于20的员工信息

SELECT *
FROM 员工信息表
WHERE age <= 20

● 8、查询没有身份证号的员工

SELECT *
FROM 员工信息表
WHERE idcard is null

● 9、查询有身份证号的员工信息

SELECT *
FROM 员工信息表
WHERE idcard is not null

● 10、查询年龄不等于88的员工信息

SELECT *
FROM 员工信息表
WHERE age != 88

● 11、查询年龄在15岁(包含)到20岁(包含)之间的员工信息

SELECT *
FROM 员工信息表
WHERE age BETWEEN 15 and 20SELECT *
FROM 员工信息表
WHERE age >=15 and age <= 20

● 12、查询性别为女且年龄小于25岁的员工信息

SELECT *
FROM 员工信息表
WHERE age <= 25 and gender = '女'

● 13、查询年龄等于18或20或40的员工信息

SELECT *
FROM 员工信息表
WHERE age = 18 or age = 20 or age = 40SELECT *
FROM 员工信息表
WHERE age in (18,20,40)

● 14、查询姓名为两个字的员工信息

SELECT *
FROM 员工信息表
WHERE name LIKE'__'

● 15、查询身份证号最后一位是X的员工信息

SELECT *
FROM 员工信息表
WHERE idcard LIKE'%X'

● 16、统计该企业员工数量

SELECT COUNT(*)
FROM 员工信息表

● 17、统计该企业员工的平均年龄

SELECT AVG(age)
FROM 员工信息表

● 18、统计该企业员工的最小年龄

SELECT MIN(age)
FROM 员工信息表

● 19、统计上海地区员工的年龄之和

SELECT SUM(age)
FROM 员工信息表
WHERE workaddress = '上海'

● 20、根据性别分组,统计男性员工和女性员工的数量

SELECT gender,COUNT(*)
FROM 员工信息表
GROUP BY gender 

● 21、根据性别分组,统计男性员工和女性员工的平均年龄。

SELECT gender,AVG(age)
FROM 员工信息表
GROUP BY gender 

● 22、查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址。

SELECT workaddress,COUNT(*)
FROM 员工信息表
WHERE age <= 45 
GROUP BY workaddress  
HAVING COUNT(*) >= 3

● 23、根据年龄对公司的员工进行升序排序

SELECT *
FROM 员工信息表
ORDER BY age 

● 24、根据入职时间,对员工进行降序排序

SELECT *
FROM 员工信息表
ORDER BY entrydate  DESC

● 25、根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序

SELECT *
FROM 员工信息表
ORDER BY age,entrydate DESC

● 26、查询第一页员工数据,每页展示10条记录

SELECT *
FROM 员工信息表
LIMIT 0,10

● 27、查询第二页员工数据,每页展示10条记录

SELECT *
FROM 员工信息表
LIMIT 10,10

● 28、查询年龄为20,21,22,23岁的女性员工信息

SELECT *
FROM 员工信息表
WHERE age in (20,21,22,23)

● 29,查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工

SELECT *
FROM 员工信息表
WHERE gender = '男' AND age BETWEEN 20 AND 40 AND name LIKE'___'

● 30,统计员工表中,年龄小于60岁的,男性员工和女性员工的人数

SELECT gender,COUNT(*)
FROM 员工信息表
WHERE age < 60
GROUP BY gender

● 31,查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序

SELECT `name`,age
FROM 员工信息表
WHERE age <= 35
ORDER BY age,entrydate DESC

● 32,查询性别为男,且年龄在20-40岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序

SELECT *
FROM 员工信息表
WHERE gender = '男' AND age BETWEEN 20 AND 40 
ORDER BY age,entrydate DESC
LIMIT 5

五、多表查询

这部分内容还在构思,先看看上面的反应了,留个群吧,看看有没有人加,给我提提意见,也说说自己想法,我继续完善我这个教程。知乎不能发码,想进的私信我了

相关文章:

  • 提高篇(八):扩展Processing功能:从库使用到跨平台应用
  • 鸿蒙开发接口数据管理:【@ohos.data.distributedDataObject (分布式数据对象)】
  • 总结开发过程遇到问题有哪些渠道可以寻找解决方案
  • 遗址博物馆ar互动展示软件提供丰富的趣味化体验
  • springboot编写简述01
  • linux的编辑安装
  • 基于JSP技术的社区疫情防控管理信息系统
  • 车载开发之预置无源码apk到Android系统(带so文件)
  • 【JavaScript】【分享】关于this
  • CSS实现一个雨滴滑落效果
  • 新奇css模板
  • Java/Golang:活用interface,增加程序扩展性
  • 堆和栈的空间利用率
  • 2024下《系统集成项目管理工程师》50个高频考点汇总!值得收藏
  • 怎么建设高性能多核DSP+FPGA实验室?一起来河北工程大学看看
  • 【Leetcode】101. 对称二叉树
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • C++类中的特殊成员函数
  • FineReport中如何实现自动滚屏效果
  • java小心机(3)| 浅析finalize()
  • js正则,这点儿就够用了
  • JS字符串转数字方法总结
  • log4j2输出到kafka
  • Markdown 语法简单说明
  • React-flux杂记
  • vue-router的history模式发布配置
  • Vue学习第二天
  • Vue组件定义
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 基于axios的vue插件,让http请求更简单
  • 检测对象或数组
  • 马上搞懂 GeoJSON
  • 前端攻城师
  • 使用SAX解析XML
  • 一起参Ember.js讨论、问答社区。
  • nb
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​第20课 在Android Native开发中加入新的C++类
  • # 数据结构
  • #13 yum、编译安装与sed命令的使用
  • (02)Hive SQL编译成MapReduce任务的过程
  • (1)(1.11) SiK Radio v2(一)
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (第27天)Oracle 数据泵转换分区表
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (顺序)容器的好伴侣 --- 容器适配器
  • (一)基于IDEA的JAVA基础10
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)fock函数详解