SQL语法

数据库和 SQL 概念

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它的产生距今已有六十多年。随着信息技术和市场的发展,数据库变得无处不在:它在电子商务、银行系统等众多领域都被广泛使用,且成为其系统的重要组成部分。

数据库用于记录数据,使用数据库记录数据可以表现出各种数据间的联系,也可以很方便地对所记录的数据进行增、删、改、查等操作。

结构化查询语言(Structured Query Language)简称 SQL,是上世纪 70 年代由 IBM 公司开发,用于对数据库进行操作的语言。更详细地说,SQL 是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。

MySQL 介绍

MySQL 是一个 DBMS(数据库管理系统),由瑞典 MySQLAB 公司开发,目前属于 Oracle 公司,MySQL 是最流行的关系型数据库管理系统(关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据)。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发者都选择 MySQL 作为网站数据库。MySQL 使用 SQL 语言进行操作。

基础SQL语句

# 查看数据库——ALL
show databases;

# 连接数据库
use <数据库名>;

# 查看表——ALL
show tables;

# 退出
quit (or) exit

数据类型

在这里插入图片描述

  • CHAR 和 VARCHAR 的区别: CHAR 的长度是固定的,而 VARCHAR 的长度是可以变化的,比如,存储字符串 “abc",对于 CHAR(10),表示存储的字符将占 10 个字节(包括 7 个空字符),而同样的 VARCHAR(12) 则只占用4个字节的长度,增加一个额外字节来存储字符串本身的长度,12 只是最大值,当你存储的字符小于 12 时,按实际长度存储。
  • ENUM和SET的区别: ENUM 类型的数据的值,必须是定义时枚举的值的其中之一,即单选,而 SET 类型的值则可以多选。
  • 参考

表操作

数据表(table)简称表,它是数据库最重要的组成部分之一。数据库只是一个框架,表才是实质内容。而一个数据库中一般会有多张表,这些各自独立的表通过建立关系被联接起来,才成为可以交叉查阅、一目了然的数据库。

创建表

语句格式

CREATE TABLE <表的名字>
(
列名a 数据类型(数据长度),
列名b 数据类型(数据长度),
列名c 数据类型(数据长度)
);
create table CSDN_table(id int,name varchar(12),sex varchar(12));
# or 
create table CSDN_table
(
id int,
name varchar(12),
sex varchar(12)
);

插入数据

语句格式

INSERT INTO <表的名字>(列名a,列名b,列名c) VALUES(1,2,3);

insert into CSDN_table(id,name,sex) values(1,'李四','男');
# or
insert into CSDN_table values(1,'李四','男');
  • 注意列名与值的一一对应关系
  • VARCHAR,TEXT,DATE,TIME,ENUM、CHAR 等类型的数据需要单引号修饰,而 INT,FLOAT,DOUBLE 等则不需要

SELECT语句

SELECT <要查询的列名> FROM <表名字> WHERE <限制条件>;
select name,age from CSDN_table;
 
# 查询一个表的所有内容
select * from CSDN_table;
  • 星号** * 代替<要查询的列名>**表示要查询列表中的所有列
  • where语句不添加,代表不做任何限制,即非条件查询方式

where条件查询

SELECT 语句常常会有 WHERE 限制条件,用于达到更加精确的查询。

  1. WHERE限制条件可以有数学符号 (=,<,>,>=,<=)
  2. WHERE 限制条件可以是逻辑关系AND OR !
  3. IN 和 NOT IN ,用于筛选“在”或“不在”某个范围内的结果
  4. is [ not ] NULL,用于判断表达式的值是否为空。(NULL是不确定的数,不能使用=与 !=判定)
select name from CSDN_table where name='傻小二';
# or
select name,age from CSDN_table where age>15 and age<=30;
# or
select name,age from CSDN_table where age>20 or age<=30;
# or
# 查询CSDN_table表中年龄是20或30的人
select name,age from CSDN_table where age in(20,30);
# 查询CSDN_table中不叫张三的人的信息
select name,age from CSDN_table where name not in('张三');
select name,age from CSDN_table where age is NULL;

模糊查询

关键字 LIKE 可用于实现模糊查询,常见于搜索功能中。和 LIKE 联用的通常还有通配符,代表未知字符。SQL中的通配符是 _% 。其中

  • _ 代表一个未指定字符,
  • % 代表任意个未指定字符
[NOT] LIKE 条件
# 使用%通配符来查找所有刘姓学生信息
select Sname,Sno,Ssex from Student where Sname like '刘%';
# 使用_通配符来查找姓欧阳全名三字的学生
select Sname,Sno,Ssex from Student where Sname like '欧阳_'

字符转义:
当我们需要查找的目标中包含 _ 或者 % 时,需要将其转意后使用。

  • \
  • escape 自定义字符作为转义字符
select * from Student where Sname like 'Sim%\_';
# or
select * from Student where Sname like ‘Sim%!_%escape '!';

ORDER BY排序

为了使查询结果看起来更顺眼,我们可能需要对结果按某一列来排序,这就要用到 ORDER BY 排序关键词。

  • 默认情况下,ORDER BY 的结果是升序排列
  • 而使用关键词 ASC 和 DESC 可指定升序或降序排列
select * from CSDN_table order by Sno DESC;

GROUP BY分组

本节请参考静风铃博客,作着写的很好。

SQL内置函数

函数名COUNTSUMAVGMAXMIN
作用:计数求和求平均值最大值最小值

其中 COUNT 函数可用于任何数据类型(因为它只是计数),而 SUM 、AVG 函数都只能对数字类数据类型做计算,MAX 和 MIN 可用于数值、字符串或是日期时间数据类型。

内置函数([DISTINCT|ALL] <列名>
# 计算出课号为2的课程中Grade的最大、最小值, AS 关键词可以给值重命名
select max(grade) as max_G from Student_Grade where Sno=2;
# 可以混合使用内置函数
select max(grade) as max_G,min(grade) as min from Student_Grade;

多表处理

有时候必须处理多个表上的信息才能获得所需的信息,所以有时需要操作多个表。

子查询

例如:想要知道名为 “Tom” 的员工所在部门做了几个工程。员工信息储存在 employee 表中,但工程信息储存在 project 表中。

# 上面代码包含两个 SELECT 语句,第二个 SELECT 语句将返回一个集合的数据形式,然后被第一个 SELECT 语句用 in 进行判断。
SELECT of_dpt,COUNT(proj_name) AS count_project FROM project GROUP BY of_dpt
HAVING of_dpt IN
(SELECT in_dpt FROM employee WHERE name='Tom');

HAVING 关键字可以的作用和 WHERE 是一样的,都是说明接下来要进行条件筛选操作,区别在于 HAVING 用于对分组后的数据进行筛选。

连接查询

在处理多个表时,子查询只有在结果来自一个表时才有用。但如果需要显示两个表或多个表中的数据,这时就必须使用连接 (join) 操作。 连接的基本思想是把两个或多个表当作一个新的表来操作。
参考

修改与删除—表和数据库

  • 删除数据库
# 删除数据库
drop database <数据库名>
  • 删除一张表
# 删除一张表
drop table <表名>
  • 表的重命名
rename table原名 to 新名字;

ALTER TABLE 原名 RENAME 新名;

ALTER TABLE 原名 RENAME TO 新名;

表结构的修改

  • 增加一列
ALTER TABLE 表名字 ADD COLUMN 列名字 数据类型 约束;

ALTER TABLE 表名字 ADD 列名字 数据类型 约束;

新增加的列,被默认放置在表的最右边。如果要把增加的列插入在指定位置,则需要在语句的最后使用AFTER关键词(“AFTER <指定列名>” 表示新增的列被放置在 “指定列” 的后面)。如果想放在第一列的位置,则使用 FIRST 关键词。

  • 删除一列
ALTER TABLE 表名字 DROP COLUMN 列名字;
# or
ALTER TABLE 表名字 DROP 列名字;
  • 重命名一列
ALTER TABLE 表名字 CHANGE 原列名 新列名 数据类型 约束;

此语句其实不只可用于重命名一列,准确地说,它是对一个列做修改(CHANGE)

这条重命名语句后面的 “数据类型” 不能省略,否则重命名失败。

当原列名和新列名相同的时候,指定新的数据类型或约束,就可以用于修改数据类型或约束。

要修改一列的数据类型,除了使用刚才的 CHANGE 语句外,还可以用这样的 MODIFY 语句:


ALTER TABLE 表名字 MODIFY 列名字 新数据类型;
  • 修改表中的某个值
    大多数时候我们需要做修改的不会是整个数据库或整张表,而是表中的某一个或几个数据,这就需要我们用下面这条命令达到精确的修改:
UPDATE 表名字 SET 列名字=1,列名字=2 WHERE 条件;

一定要有 WHERE 条件,否则会出现你不想看到的后果。

  • 删除一行记录

删除表中的一行数据,也必须加上 WHERE 条件,否则整列的数据都会被删除。

DELETE FROM 表名字 WHERE 条件;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值