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

SQL入门

一、SQL 语言概述

数据库就是指数据存储的库,作用就是组织数据并存储数据,数据库如按照:库 -> 表 -> 数据三个层级进行数据组织,而 SQL 语言,就是一种对数据库、数据进行操作、管理、查询的工具,通过SQL 语言,可以完成对数据的增删改查等操作。

数据库软件就是提供库 -> 表 -> 数据,这种数据组织形式的工具软件,也称之为数据库管理系统,常见的数据库软件有: Oracle 、 MySQL 、 SQLServer 、 PostgreSQL 、 SQLite ,本文使用MySQL 软件进行学习,同时用第三方图形化工具DBeaver操作 MySQL。

SQL 全称是“ Structured Query Language ”,即“结构化查询语言”,用于访问和处理数据库的标准的计算机语言。SQL 语言 1974 年由 Boyce 和 Chamberlin 提出,并首先在 IBM 公司研制的关系数据库系统 SystemR 上实现,经过多年发展, SQL 已经成为数据库领域统一的数据操作标准语言,几乎市面上所有的数据库系统都支持使用 SQL 语言来操作。

MySQL安装:手把手教你安装MySQL(最新版本安装)_哔哩哔哩_bilibili

DBeaver安装:【黑马程序员python教程,8天python从入门到精通,学python看这套就够了】 【精准空降到 03:06】 https://www.bilibili.com/video/BV1qW4y1a7fU/?p=130&share_source=copy_web&vd_source=b7e4ae388f33cefa375c8fb8789aa3bc&t=186

二、SQL基础语法

2.1 SQL 的语法特征

 SQL 的语法特征:

  • 大小写不敏感
  • 字符串的值必须要用单引号包围起来
  • 可以单行或多行书写,最后以分号( ; )号结束
  • SQL 支持注释:
    1. 单行注释: -- 注释内容( -- 后面一定要有一个空格)
    2. 单行注释: # 注释内容( # 后面可以不加空格,推荐加上)
    3. 多行注释: /* 注释内容 */

我们打开DBeaver,来验证一下:

首先打开编辑器,如下图所示。

输入“SHOW DATABASES;”(查看数据库),如下图所示,无论是大写,小写,还是大小写混杂,得到的输出结果相同,证明SQL 确实大小写不敏感。

运用3种注释方式,运行正常:

2.2 SQL 语言的分类

由于数据库管理系统(数据库软件)功能众多,不仅仅是存储数据,还包含:数据的管理、表的管理、库的管理、账户管理、权限管理等等。所以,操作数据库的 SQL 语言,也基于功能,可以划分为 4 类

  • 数据定义: DDL ( Data Definition Language )
    • 库的创建删除、表的创建删除等
  • 数据操作: DML ( Data Manipulation Language )
    • 新增数据、删除数据、修改数据等
  • 数据控制: DCL ( Data Control Language )
    • 新增用户、删除用户、密码修改、权限管理等
  • 数据查询: DQL ( Data Query Language )
    •  基于需求查询和计算数据

2.2.1 DDL(数据定义)

2.2.1.1 DDL库管理

基础语法:

SHOW DATABASES;   # 查看数据库

USE 数据库名称;   # 使用数据库

CREATE DATABASE 数据库名称 [CHARSET UTF8];   # 创建数据库,方框[ ]的意思是里面的内容是可选的

DROP DATABASE  数据库名称;    # 删除数据库

SELECT DATABASE();    #  查看当前使用的数据库

我们在DBeaver中应用一下DDL库管理基础语法:

1.创建数据库test

create database test charset utf8;-- 创建数据库test

运行后:

2.创建数据库后,我们接着查看数据库,验证数据库test是否已存在。

create database test charset utf8;-- 创建数据库test
show databases;-- 查看数据库

运行后:

3.使用数据库test,再查看当前使用的数据库是否是test

create database test charset utf8;-- 创建数据库test
show databases;-- 查看数据库
use test;-- 使用数据库test
select database ();-- 查看当前使用的数据库

运行后:

4.删除数据库test后,我们接着查看数据库,验证数据库test是否已不存在。

create database test charset utf8;-- 创建数据库test
show databases;-- 查看数据库
use test;-- 使用数据库test
select database ();-- 查看当前使用的数据库
drop database test;-- 删除数据库test
show databases;-- 查看数据库

运行后:

2.1.1.2 DDL表管理

基础语法:

SHOW TABLES;   # 查看表(需要先选择数据库)

CREATE TABLE 表名称 (

    列名称  列类型,

    列名称  列类型,

    ……

);        # 创建表

DROP TABLE 表名称;    # 删除表

DROP TABLE IF EXISTS 表名称;    # 删除表

其中在创建表时提到了列类型,列类型有:

  • int  --整数
  • float  --浮点数
  • varchar(长度) --文本,长度为数字,作最大长度限制
  • data --日期类型
  • timestamp --时间戳类型

我们在DBeaver中应用一下DDL表管理基础语法:

1.在前面建立的数据库test中建立表student,然后查看。

use test;# 一定先选择数据库
create table student(
    id int,
    name varchar(10),
    age int
);
show tables;

运行后:

2.在左边数据库导航栏中打开表student查看。

3.删除表student(在2.2.1DDL中我们只学习基础语法,在后面学习添加数据)

注意:在第2步中,打开了表student,要关闭表student后才能删除。

2.2.2 DML(数据操作)

关键字:

  1. 插入 INSERT
  2. 删除 DELETE
  3. 更新 UPDATE

基础语法:

# 数据插入

INSERT INTO 表[(列1,列2,列3,列4,……,列N)] VALUES(值1,值2,值3,值

4,……,值N)[,(值1,值2,值3,值4,……,值N),……,(值1,值2,值3,值4,……,值N)];  #方框[ ]的意思是里面的内容是可选的

# 数据删除

DELETE FROM 表名称 [WHERE 条件判断];

#数据更新

UPDATE 表名称 SET 列=值 [WHERE 条件判断];

条件判断:列 操作符 值

操作符:= 、<、 >、 <=、 >=、 !=

DML语法应用:

1.在数据库test表student中插入数据。

use test;
create table student(
    ID int,
    name varchar(10),
    age int
);
# 插入全部列数据
insert into student (ID,name,age) values(01,'加菲猫',3),(02,'欧迪',2),(03,'乔恩',23);
# 仅插入ID列数据
insert into student (ID) values(04),(05);

运行后在左边数据库导航栏中打开表student查看,可以看到,2次插入数据成功,仅插入的ID数据“04”和“05”所对应的name和age为空。

如果我们要插入的数据,每组都包括表中所有属性,可以写得更简便。

# 插入全部列数据
insert into student (ID,name,age) values(01,'加菲猫',3),(02,'欧迪',2),(03,'乔恩',23);

可以写成:

# 插入全部列数据
insert into student values(01,'加菲猫',3),(02,'欧迪',2),(03,'乔恩',23);

这也是列名加上了方括号的原因。

2.在表student中删除数据。

use test;
create table student(
    ID int,
    name varchar(10),
    age int
);
# 插入全部列数据
insert into student (ID,name,age) values(01,'加菲猫',3),(02,'欧迪',2),(03,'乔恩',23);
# 仅插入ID列数据
insert into student (ID) values(04),(05);
#删除name为乔恩的数据
delete from student where name='乔恩';
#删除age<3的数据
delete from student where age<3;

运行后:

注意:

# 数据删除

DELETE FROM 表名称 [WHERE 条件判断]

在数据删除的语法中,“WHERE 条件判断”在方框内,是可选的,如果我们不选,就会删除全部数据。

3.更新表student中的数据。

use test;
create table student(
    ID int,
    name varchar(10),
    age int
);
# 插入全部列数据
insert into student (ID,name,age) values(01,'加菲猫',3),(02,'欧迪',2),(03,'乔恩',23)
#将ID=03的name修改为Mary
update student set name='Mary' where ID=03;

运行后:

2.2.3 DQL(数据查询)

下面我们将从基础查询、分组聚合、排序分页3个方面认识DQL。

我们先建立一个表info:

use test;
create table info(
    ID int,
    name varchar(10),
    sex varchar(10),
    age int
);
insert into info(ID,name,sex,age) values(01,'张三','男',26),(02,'李四','女',16),(03,'王五','男',56),(04,'小明','男',6),(05,'coco','女',36);

生成的图表:

下面的操作基于此表。

2.2.3.1基础查询

通过 SELECT 关键字开头的 SQL 语句,进行数据的基础查询,语法如下:

SELECT 字段列表 |* FROM 表;  #从(FROM)表中选择(SELECT )某些列进行展示

SELECT 字段列表 |* FROM 表 WHERE 条件判断;   #从(FROM)表中选择(SELECT )某些符合条件的列进行展示 ,也称为过滤

基于表info进行查询:

代码:

#查询name和age两个列
select name,age from info;
#查询全部列
select ID,name,sex,age from info;
#查询全部列的简便写法
select * from info;

过滤查询:

代码:

#查询ID和name两个列,年龄<30岁
select ID,name from info where age<30;
#查询全部列,name为coco
select ID,name,sex,age from info where name='coco';
#简便写法
select * from info where name='coco';
2.2.3.2分组聚合

分组聚合应用场景非常多,如:统计班级中,男生和女生的人数。按需要分组并统计每个组的人数,这就称之为:分组聚合。

基础语法:

SELECT 字段 | 聚合函数 FROM 表 [WHERE 条件判断] GROUP BY 列;

聚合函数:

  • SUM(列) 求和
  • AVG(列) 求平均值
  • MIN(列) 求最小值
  • MAX(列) 求最大值
  • COUNT(列 | *) 求数量

基于表info进行分组查询:

注意:SELECT 中,除了聚合函数外, GROUP BY后面出现了哪个列,哪个列在能出现SELECT 中。

代码:

#按照性别分组,统计各组人数
select sex ,count(*) from info group by sex;
#按照性别分组,统计平均年龄
select sex,avg(age) from info group by sex;
#按照性别分组,统计最大最小年龄
select sex,max(age),min(age) from info group by sex;
2.2.3.3排序分页

使用 ORDER BY 关键字可以对查询的结果指定某个列进行排序。

语法:

SELECT 字段 | 聚合函数 FROM 表

WHERE 条件判断 

GROUP BY 列

ORDER BY 列 [ASC|DESC];

基于表info进行查询,并对查询结果进行排序:

代码:

#按照年龄升序排列结果
select * from info order by age asc;
#按照ID降序排列结果
select * from info order by ID desc;

使用 LIMIT 关键字可以对查询结果进行数量限制或分页显示。

语法:

SELECT 字段 | 聚合函数 FROM 表

WHERE 条件判断 

GROUP BY 列

ORDER BY 列 [ASC|DESC]

LIMIT n [,m];

基于表info进行查询,并对查询结果进行限制:

代码:

#查询结果只保留3条
select * from info limit 3;
#找出年龄最大的2个人
select * from info order by age desc limit 2;
#从第3条开始,取后面2条
select * from info limit 3,2;

注意:

  • 关键字WHERE 、 GROUP BY 、 ORDER BY 、 LIMIT 均可按需求省略。
  • SELECT 和 FROM 是必写的。
  • 执行顺序:FROM -> WHERE -> GROUP BY 和聚合函数 ->SELECT -> ORDER BY -> LIMIT

http://www.kler.cn/news/358597.html

相关文章:

  • jupyter界面修改成中文教程
  • LabVIEW提高开发效率技巧----离线调试
  • 单片机中的BootLoader(BootLoader简介和写法)
  • Chromium html<lable>c++接口定义
  • SpringBoot 入门
  • 动态规划详解:最长公共子序列问题的高效解法
  • element-plus 官方表格排序问题
  • 【设计模式系列】简单工厂模式
  • 机器学习与神经网络:科技的星辰大海
  • Leetcode 3325. Count Substrings With K-Frequency Characters I
  • 【GIT】.gitignore文件的使用
  • Python版本无重复字符的最长子串
  • CSMA/CD协议 监听算法
  • ROS理论与实践学习笔记——5 ROS机器人系统仿真之URDF、Gazebo与Rviz综合应用
  • Caffeine Cache解析(一):接口设计与TinyLFU
  • python如何使用SciPy matplotlib完成数据分析?
  • 【Flutter】基础入门:项目结构
  • spring-cloud-alibaba-nacos-config2023.0.1.*启动打印配置文件内容
  • 机器学习中的朴素贝叶斯
  • 【ChatGPT】如何让 ChatGPT 提供简短、精准的答案