SQL极速入门 | 快速掌握SQL语句&入门Mysql

143 阅读8分钟

声明


速成的思路始终是有问题的,并不提倡这么做。但是好像在这么一个追求速度的环境(Working Space/Studying Environment)里面,好像所有人一边唾弃速成的学习方式,一边又巴不得一天之内学完所有现有popular技术栈。

在这里给出伟大声明先:

SQL基础

SQL与数据库概念

数据存放在数据库(database)中。

SQL是Structured Query Language的缩写,中文:结构化查询语言

SQL是用于访问和处理数据库的标准计算机语言。SQL语言用来对数据库进行特定操作,灵活度不如现有的高级语言,最初接触到的时候觉得很无聊不以为然,学到后面才知道掌握SQL语句的重要性。

SQL特点:

  1. SQL只说明要做什么,不说明怎么做。
  2. 功能强大,简单易学。
  3. 标准化,几乎所有关系型数据库都通用
  4. 不区分大小写

现有popular数据库

  • MySQL 自带客户端:mysql
  • Oracle 自带客户端:sqlplus
  • SQLServer 自带客户端:Azure Data Studio
  • PostgreSQL 自带客户端:psql

基础扫盲之后,开始进入实战环节。(极速)

Mysql初体验


组件:Mysql

Mysql安装教程网上随便一搜一大堆,此处不再浪费篇幅赘述。安装完Mysql以后,现在开始进行项目开发config。

首先设置环境变量。

命令行工具的根本依据就是环境变量,每一个命令头都来自于一个.exe程序,我们要使用mysql,可能不会次次都使用CommandLine进行开发,有可能直接从cmd打开Mysql,所以必须将Mysql的相关命令行工具的路径设置到系统变量里面。

C:\Program Files\MySQL\MySQL Server 8.0\bin

这是我的Mysql安装路径,我相信绝大部分人也是如此,直接把你自己安装的路径粘贴到系统环境变量Path里面即可。记住一定要有\bin这个路径,否则无法使用命令行工具。

打开cmd

mysql -u root -p

然后它会让你输密码,输入root即可。(绝大部分人的账号和密码应该都是root和root

image.png

到这里就是成功。以上的过程,其实被称为一次“连接”,指的是外部操作接入数据库的过程。我们在使用NaviCat对数据库进行操作的时候,第一步就是建立连接/打开连接,这一步同样需要输入用户名和密码才能连接成功。

如果有退出到cmd的需要,直接输入exit即可。

SQL语句

选择数据库/新建数据库

首先,使用show databases;,选择一个数据库。

单从这句话就可以对SQL语句展开分析:SQL语句不区分大小写,必须以分号结尾。

Mysql可以理解为一个数据库的总管,它其实是一个Database Driver,包含/管理了很多个不同的databases,而每一个database里面又有自己的不同数据内容。

如果没有数据库,使用create database xxx;创建一个。xxx是你自己想要取的名字,记得句末一定要加分号。

使用use xxx;选择一个数据库。

如果整不明白,跟着我的步骤来:

image.png

尝试创建一张表格

image.png

有这样的SQL语句:

create table dept(
deptno int primary key,
dname varchar(9),
loc varchar(10));

看起来确实没有高级语言的编排那么舒服,但是意思明白就行。

这里不用被换行吓住,当你输入在第一行末尾输入回车的时候,命令行的状态是这样的:

image.png

它在等待你的输入。

SQL语句会一直读到;才会执行,所以勇敢往下输就行。

image.png

int、varchar(n)都是类型,而primary key是主键。

有关主键:

主键全称:主键约束,每一个表通常都必须设置一个主键。

每个表只能定义一个主键

主键唯一且不能为null,表中不可能有两条记录的主键是相同的。

创建员工表:

create table employees(
    empno int primary key,
    name char(10) not null,
    deptno int,
    manager int,
    hiredate date,
    salary numeric(7, 2));

not null表示不能为空,date类型表示日期,(不是时间);numeric(7, 2)表示:总长度7位,精确到小数点后两位,值得注意的是这个总长度包含了小数点,也就是说整数位=总长-小数点位。

varchar和char的区别:varchar可以改变长度,char不可以。

尝试向表格中插入记录

我们对表格中的一行数据称为一个记录,每个列的头部称为一个字段。

插入的SQL语句有两种写法:

insert into [chart name] values(...)

insert into [chart name] (字段名1,字段名2...) values(...)

比如在这里我们向员工表按照第一种方式插入数据:

image.png

我们再向员工表中按照第二种方式插入数据,这种方式可以自行选择插入的字段:

image.png

image.png

注意无论是varchar还是char,在使用insert语句时,都要用单引号括起目标。

SELECT查询语句

select一般有两种写法

select * from 表名

select 字段1,字段2 from 表名

image.png

image.png

DISTINCT去掉一个字段中的重复记录

这里我们拿manager这个字段举例,因为有较多重复。

select manager from employees;

image.png

select distinct manager from employees;

image.png

需要注意的是,这句话仅仅只是在查找过程中去重,而不是直接删除一条记录。

Where条件过滤

select 字段名 from 表名 where 字段 运算符 值;

相关运算符:

image.png

需求1:从员工表里面找出在2号部门工作的员工的名字薪水

select name,salary from employees where deptno=2;

image.png

需求2:从员工表里面找出在2022-01-01之前雇佣的员工的名字薪水从属经理

select name,salary,manager from employees where hiredate<'2022-01-01';

image.png

可以看到已经没有了张三,因为张三的hiredate是2023-01-17

and和or运算符

对于where语句,我们还可以在where后面设置多个bool表达式来进行判定。 需求:从员工表里找出在部门1工作工资大于等于5000的员工的名字薪水

select name,salary from employees where deptno=1 and salary>=5000;

image.png

可以看到已经没有张三,因为张三的工资是4400,被滤掉了。

Like匹配字符串

在查询过程中经常会遇到查不准的现象,这时候就需要一个东西帮忙匹配相应字符串了

select 字段1,字段2 from 表名 where 字段名 like 'xx%';

需求:查找在一楼有哪些部门

select * from dept where loc like '一楼%';

image.png

in匹配多个值

in实际上相当于多个or合并,实现精准/多项查询

select 字段1,字段2 from 表名 where 字段 in (值1,值2...);

select name from employees where empno in (3,5);
等价于
select name from employees where empno=3 or empno=5;

SubQuery子查询

在这里也可以写一点从句,加深对SQL语法的理解

select * from employees where deptno in (select deptno from dept where loc like '一楼%');

image.png

查询部分的语法到这里展示完成,如果需要更多语句学习请见相关教程。

update更新记录

update 表名 set 字段1=值1,字段2=值2... where 字段名=值;

image.png

通常来说,后面的where语句都是要加上的,因为where起到筛选的作用,如果不加where则会对整张表格进行修改,所以一定要慎重。

delete删除记录

delete from 表名 where ...

如果不加delete,会删除整张表。

例子:

image.png

我们想删除空记录,那么就查找到id(主键),并且删除。

image.png

delete from ginchat.user_basic where id=10;

即可完成操作。

到这里我们可以做如下总结:

  1. insert插入记录,select选择记录并且可视化,where查找记录并给出查找结果,update修改已有记录,delete删除记录。
  2. where非常关键,如果不筛选可能会对整张表进行操作。
  3. SQL入门层次:知道数据库的概念,有哪些层。连接->use database,再来对数据库进行操作。

join连接查询

join用来查找在两个表中出现的相同的字段的相关内容。

共有三种join方式:inner join, left join, right join.

select 字段1,字段2 from 表名1 [inner/left/right] join 表2 on ... where ...

字段可以跨表,比如name和dname是两张表中不同的字段,在这里依然可以把他放到select后面进行查询。

比如部门表和员工表都有deptno这个字段,现对他展开查询。

image.png

image.png

两张表好像被拼接到了一起。

其他

后续教程参照:SQL菜鸟教程

后记


黑乎乎命令行不好使,开发过程不方便,本人使用vscode与.sql文件处理数据库。

视频教程

在通过VSCode连接Mysql时出现了问题。

image.png

解决方案

注意:有一个database叫mysql,一般记录用户数据的,不用于实际开发使用,修改用户名和密码也是在mysql这个database中进行操作。

image.png

后续操作步骤:点开VSCode数据库->选择一个连接->输入密码->连接成功->通过对.sql文件书写->点击Run on active connection运行

image.png

对.sql文件的操作是建立在连接成功的基础上,没有连接则无法运行.sql文件。一份.sql文件理论上只能跑一次,它不能像debug过程一样写一点试一点,而是要写完了之后再统一运行。 如果后一次运行的时候有前一次的代码内容,请删除前一次的内容。