关注

一文知数据库

一文知数据库

1.数据库的概念

1.1概述

  • 什么是数据库

​ 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,
修改,删除及查询操作。

  • 什么是数据库管理系统

​ 数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。

  • 数据库与数据库管理系统的关系

在这里插入图片描述

1.2 数据库表

数据库中以表为组织单位存储数据。

表类似我们的Java类,每个字段都有对应的数据类型

在这里插入图片描述

1.3常见数据库

  • MYSQL :开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。Oracle :收费的大型数据库,Oracle公司的产品。Oracle收购

  • SUN公司,收购MYSQL。

  • DB2 :IBM公司的数据库产品,收费的。常应用在银行系统中.

  • SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。

  • SyBase :已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。

  • SQLite : 嵌入式的小型数据库,应用在手机端。

当然我们最常用的数据库是:mysql、oracle

在这里插入图片描述

2.SQL分类

关系型数据库(RDBMS),关系型数据库绝对是 DBMS 的主流,其中使用最多的 RDBMS 分别是 Oracle、MySQL 和 SQL Server ,这些都是关系型数据库(RDBMS)。

  • 关系型数据库以行(row)和列(column)的形式存储数据,以便于用户理解。这一系列的行和列被称为表(table),一组表组成了一个库(database) 。

  • 表和表之间的数据记录是有关系的(relationship)。现实世界中的各种实体和实体之间的各种联系均可以使用关系模型来表示。关系型数据库,就是建立在关系模型基础上的数据库。

  • SQL 就是关系型数据库的查询语言。

在这里插入图片描述

  • 非关系型数据库(非 RDBMS),可以看做是传统关系型数据库的功能的阉割版本,基于键值对的存储数据,不需要经过 SQL 层的解析,性能非常高。同时,通过减少不常用的功能,进一步挺高性能。

  • 相比于 SQL,NoSQL 泛指非关系型数据库,包括了榜单上的键值性数据库、文档型数据库、搜索引擎和列存储等,除此之外还包括

图形数据库,也只有 NoSQL 一词才可以将这些技术囊括进去。

2.1SQL介绍

数据库是不认识JAVA语言的,但是我们同样要与数据库交互,这时需要使用到数据库认识的语言SQL语句,它是数据库的代码。

结构化查询语言(Structured Query Language)简称SQL,是关系型数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句,但都有特有内容

2.2SQL语句分类

SQL分类:数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等

数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:INSERT,DELETE,UPDATE等

数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。主要的语句关键字包括GRANT、REVOKE、COMMIT、ROLLBACK、SAVEPOINT 等。

数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,WHERE等。

事务控制语言:简称 TCL(Transaction Control Language),COMMIT提交事务、ROLLBACK 回滚事务。

SQL通用语法:

  • SQL语句可以单行或多行书写,以分号( ; )结尾 。可使用空格和缩进来增强语句的可读性。
  • MySQL 在 Windows 环境下是大小写不敏感的。
  • MySQL 在 Linux 环境下是大小写敏感的。
  • 数据库名、表名、表的别名、变量名是严格区分大小写的额。关键字、函数名、列名(或字段名)、列的别名(或字段的
  • 别名)是忽略大小写的。
  • 推荐采用统一的书写规范:
  • 数据库名、表名、表的别名、字段别名等都小写。
  • SQL 关键字、函数名、绑定变量等都大写。

例如:

  • SELECT * FROM user。
  • SELECT … FROM dual ; # dual 称为伪表注释

#:单行注释

  • – 注释文字 (-- 后面必须包含一个空格):单行注释
  • /* 注释文字 */ : 多行注释
  • 关键字不能被缩写也不能分行

标点符号:

  • 必须保证所有的 ()、单引号、双引号是成对结束的。
  • 必须使用英文状态下的半角输入方式。
  • 字符串类型或日期时间类型的数据可以使用单引号(‘’)表
  • 示。
  • 列的别名,尽量使用双引号(“”),而且不建议省略 as 。

命名规则:

  • 数据库、表名不得超过 30 个字符,变量名限制为 29 个。
  • 必须只能包含 [a-zA-Z0-9_] 共 63 个字符。
  • 数据库名、表名、字段名等对象名重要不要包含空格。
  • 同一个 MySQL 软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名。
  • 必须保证字段没有和保留字、数据库系统或常用方法冲突,如果坚持使用,请在 SQL 语句中使用 `(着重号)引起来。
  • 保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。如:数据类型在一个表里是整数,但是到另一个表里就不要变为字符类型。

# 表名错误,因为表名有空格

create table student info(…);

# 起别名时,as 都可以省略,如果字段别名中没有空格,那么可以省

略""

select id as "编号", `name` as "姓名" from t_stu;

\# 错误,如果字段别名中有空格,那么不能省略""

select id as 编 号, `name` as 姓 名 from t_stu;

2.3关系型数据库设计规则

2.3.1 概述
  • 关系型数据库的典型数据结构就是数据表,这些数据表的组成都是结构化的(Structured )。
  • 将数据放到表中,表再放到数据库中。
  • 一个数据库中可以有多个表,每个表都有一个名字,用来标识自己。表名具有唯一性。
  • 表具有一些特性,这些特性定义了数据在表中是如何存储,类似于 Java 中类的设计
2.3.2 表、记录、字段
  • E-R(entity-relationship,实体-联系)模型中有三个主要的概念:实体集、属性和联系集。

  • 一个实体集(class)对应数据库中的一个表(table);一个实体(instance)则对应数据库表中的一行(row),也称为一条

    记录(record);一个属性(attribute)对应于数据库表中的一列(column),也称为一个字段(field)。

在这里插入图片描述

3.SQL语句中的数据类型

MySQL中的我们常使用的数据类型如下
在这里插入图片描述

整数类型 字节 范围(有符号) 范围(无符号) 用途

在这里插入图片描述

日期和时间类型

在这里插入图片描述

字符串类型

在这里插入图片描述

4.DDL-数据库操作

4.1创建数据库

格式:

create database 数据库名;

create database 数据库名 character SET 字符集; # 可以

设置数据库的字符编码

例如:

创建数据库 数据库中数据的编码采用的是安装数据库时指定的默认编码 utf8
CREATE DATABASE java1;
创建数据库 数据库中数据的编码采用的是安装数据库时指定编码 gbk
CREATE DATABASE myDatabase character SET gbk;

4.2查看数据库

查看数据库MySQL服务器中的所有的数据库:
SHOW DATABASES;
查看某个数据库的定义的信息:
SHOW CREATE DATABASE 数据库名;

例如:

SHOW CREATE DATABASE  java1;

4.3 删除数据库

格式

DROP DATABASE 数据库名称;

例如:

DROP DATABASE java1;

4.4使用数据库

查看正在使用的数据库:
select database();
切换数据库
use 数据库名;

练习题:


###数据库操作
# 创建数据库 (默认字符集: UTF-8 , 此编码为安装时设置)
CREATE DATABASE java2;
#显示所有数据库
SHOW DATABASES;
#显示数据库的创建信息
SHOW DATABASE JAVA2;
#删除数据库
DROP DATABASE JAVA2;

5.DDL–表结构操作 (重点※)

5.1 创建表

格式:

create table 表名(
   字段名 类型(长度) [约束],
   字段名 类型(长度) [约束],
   ...
);
类型:
 varchar(n) 字符串
 int 整形
 double 浮点
 date 日期
 timestamp 时间戳
 datetime 日期时间
约束:
 Primary key 主键,被主键修饰字段中的数据,不能重复、不能为
nullNot null 非空约束
 Unique 唯一约束
 Default 默认约束

5.2查看表

查看数据库中的所有表

格式:

SHOW tables;
查看创建表语句

格式

SHOW CREATE tables 表名;
查看表结构

格式

DESC 表名;

5.3删除表

格式

drop table 表名;

5.4 修改表结构

5.4.1 增加字段
alter table 表名 add 字段名 类型(长度) [约束];

作用:新增表添加列

例如:

#1,为学生表添加一个新的字段为 班级名称 varchar(50)
ALTER TABLE t_student ADD classname varchar(50) ;
5.4.2 修改字段信息
alter table 表名 modify 列名 类型(长度) [约束];

作用:修改表修改列的类型长度及约束

例如:

#2, 将学生表的班级名称修改成int类型
ALTER TABLE t_student modify classname int;
5.4.3 修改字段名
alter table 表名 change 旧列名 新列名 类型(长度) [约束];

作用:修改表修改列名

例如:

#3,将学生表的班级名称字段更换为 classname2 int
ALTER TABLE t_student change classname classname2 int ;
5.4.4 删除字段
alter table 表名 drop 列名; 

作用:修改表删除列.

例如:

#4, 删除学生表中classname2这列
ALTER TABLE t_student drop  classname2;
5.4.5 修改表字符集
alter table 表名 character SET 字符集;

作用:修改表的字符集

例如:

#6, 将学生表 t_students 的编码表进行修改,修改成 gbk

ALTER TABLE t_student character set gbk;

5.5 修改表名

rename table 旧表名 to 新表名;

作用:修改表名

例如:把t_student表名改成student

rename table t_student to student;

练习题:

#######表 table
# 创建表--t_user
## 有主键 字段id,username,password,phone,remark
create table t_user(
	id int primary key,
    username char(30) ,
    password char(30) ,
    phone int ,
    remark char(20)
);
## 创建表之后,可以查询创建表语句 (数据在可视化视图中显示不)
show create tables t_user;
##查看表结构
desc t_user;
#删除表
drop table t_user;
#修改表结构 -- 如果SQL语句中使用到关键字,建议使用重音符括住
##添加字段 -- address
alter table t_user add address int;
##修改字段类型
alter table t_user modify address char(255);
##修改整个字段
alter table t_user change address address2  char(10);
##删除字段
alter table t_user drop address2;
##修改表名 -- 修改成user  
rename table t_user to tuser;
##修改字符集 -- 修改成gbk
alter table tuser  character  set gbk;

6. DML–数据操作语言(⭐⭐)

6.1 插入表记录INSERT

语法

-- 向表中插入某些字段
INSERT INTO 表名 (字段1,字段2,字段3) VALUES (1,2,3);
--向表中插入所有字段,字段的顺序为创建表时的顺序
INSERT INTOVALUES (1,2,3..); # 简写

注意:

  • 值与字段必须对应,个数相同,类型相同
  • 值的数据大小必须在字段的长度范围内
  • 除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)
  • 如果要插入空值,可以不写字段,或者插入 null。
  • 注意每一列的约束问题
create table student(
 sid int(20) primary key,
 sname varchar(60) not null,
 email varchar(60),
 isdel varchar(10) default '1'
);
insert into
student(sid,sname,email,isdel)values(1001,'张
三','[email protected]','1');
insert into student(sid,sname,email,isdel)
values(1001,'李四','[email protected]','0');
insert into student values(1003,'王
五','[email protected]','0');

6.2 更新表记录UPDATE

用来修改指定条件的数据,将满足条件的记录指定列修改为指定值

--更新所有记录的指定字段
UPDATE 表名 SET 字段名1=1,字段名2=2,...;
--更新符号条件记录的指定字段
UPDATE 表名 SET 字段名1=1,字段名2=2,... WHERE 条件;

注意:

  • 列名的类型与修改的值要一致.
  • 修改值的时候不能超过最大长度.
  • 除了数值类型外,其它的字段类型的值必须使用引号引起
  • 不能修改表中没有的字段
#把王五改成王小五
update student set sname='王小五';
#加筛选条件
update student set sname='王小五' where sid = 1003;
update student set sname='王五
五',isdel='1',email='[email protected]' where sid =
1003;

6.3删除表记录DELETE

语法:

DELETE from 表名 [WHERE 条件];
或者
truncate table 表名

注意:删除数据时要小心

#删除数据

delete from student where sid=1003;

delete from student;

truncate table student;

truncate与delete有什么区别?

DELETE 一条一条删除,不清空auto_increment记录数。
truncate 直接将表删除,重新建表,auto_increment将置为零,
从新开始。
create table student(
   sid int(20) primary key auto_increment,
    sname varchar(60) not null,
 email varchar(60),
 isdel varchar(10) default '1'
);
#auto_increment设置sid自动增长,默认从1开始
## 删除所有,不清空自动增长列记录数。
DELETE FROM student;
## 删除所有,将清空自动增长列记录数。
TRUNCATE TABLE student;

7.DQL–简单查询(⭐⭐⭐)

准备数据:

#创建商品表:
create table d_product(
 pid int primary key,
 pname varchar(20),
 price double,
 category_id varchar(32)
);
#插入数据
INSERT INTO d_product VALUES ('1', '苹果', '5000',
'c001');
INSERT INTO d_product VALUES ('2', 'vivo', '3000',
'c001');
INSERT INTO d_product VALUES ('3', '华为', '5000',
'c001');
INSERT INTO d_product VALUES ('4', 'oppo', '1000',
'c001');
INSERT INTO d_product VALUES ('5', '真维斯', '200',
'c002');
INSERT INTO d_product VALUES ('6', 'only', '440',
'c002');
INSERT INTO d_product VALUES ('7', '圣迪奥', '800',
'c002');
INSERT INTO d_product VALUES ('8', 'vero moda',
'800', 'c003');
INSERT INTO d_product VALUES ('9', '相宜本草', '200',
'c003');
INSERT INTO d_product VALUES ('10', '卫龙辣条', '5',
NULL);
INSERT INTO d_product VALUES ('11', '好想你枣', '56',
NULL);
INSERT INTO d_product VALUES ('12', '香飘飘奶茶',
'3', NULL);
INSERT INTO d_product VALUES ('13', '小浣熊干脆面',
'1', NULL);
INSERT INTO d_product VALUES('14','aop','300',NULL);
INSERT INTO d_product
VALUES('15','p_aop','500',NULL);
INSERT INTO d_product VALUES ('16', 'sda', '53',
NULL);
#创建商品表: COMMENT表示注释
CREATE TABLE emp(
 EMPNO int(11) PRIMARY KEY COMMENT '员工编号',  
 ENAME varchar(10) COMMENT '员工姓名',
 JOB varchar(9) COMMENT '工作',
 MGR int(11) COMMENT '经理编号',
 HIREDATE date COMMENT '入职日期',
 SAL double COMMENT '工资',
 COMM double COMMENT '奖金',
 DEPTNO int(11) COMMENT '部门号'
);
#插入数据
INSERT INTO emp VALUES (7369, 'SMITH', 'CLERK',
7902, '1980-12-17', 1002, NULL, 20);
INSERT INTO emp VALUES (7499, 'ALLEN', 'SALESMAN',
7698, '1981-02-20', 1600, 300, 30);
INSERT INTO emp VALUES (7521, 'WARD', 'SALESMAN',
7698, '1981-02-22', 1250, 500, 30);
INSERT INTO emp VALUES (7566, 'JONES', 'MANAGER',
7839, '1981-04-02', 2975, 0, 20);
INSERT INTO emp VALUES (7654, 'MARTIN', 'SALESMAN',
7698, '1981-09-28', 1250, 1400, 30);
INSERT INTO emp VALUES (7698, 'BLAKE', 'MANAGER',
7839, '1981-05-01', 2850, NULL, 30);
INSERT INTO emp VALUES (7782, 'CLARK', 'MANAGER',
7839, '1981-06-09', 2450, NULL, 10);
INSERT INTO emp VALUES (7788, 'scott3', 'ANALYST',
7566, '1987-07-03', 3000, NULL, 20);
INSERT INTO emp VALUES (7839, 'KING', 'PRESIDENT',
NULL, '1981-11-17', 5000, NULL, 10);
INSERT INTO emp VALUES (7844, 'TURNER', 'SALESMAN',
7698, '1981-09-08', 1500, 0, 30);
INSERT INTO emp VALUES (7876, 'ADAMS', 'CLERK',
7788, '1987-07-13', 1100, NULL, 20);
INSERT INTO emp VALUES (7900, 'JAMES', 'CLERK',
7698, '1981-12-03', 950, NULL, 30);
INSERT INTO emp VALUES (7902, 'FORD', 'ANALYST',
7566, '1981-12-03', 3000, NULL, 20);
INSERT INTO emp VALUES (7934, 'MILLER', 'CLERK',
7782, '1981-01-23', 1300, NULL, 10);

查询语法

select 字段名1 , 字段名2 ,.......
from   表名
[where 筛选条件]select   *  
from   表名
[where 筛选条件]
解释: * 通配符,表示所有字段(所有列名)
● 一般情况下,除非需要使用表中所有的字段数据,最好不要使用通配
符 * 。使用通配符虽然可以节省输入查询语句的时间,但是获取不需
要的列数据通常会降低查询和所使用的应用程序的效率。通配符的优势
是,当不知道所需要的列的名称时,可以通过它获取它们。
● 在生产环境下,不推荐直接使用 SELECT * 进行查询
#1.查询所有
select * from d_product;
#2.查询pname和price
select pname,price from d_product;
#3.别名查询.使用的关键字是as(as可以省略的).
   #3.1表别名:
   select d.pname,d.price from d_product as
d,t_product as t;
   #3.2列别名:
   select avg(price) as avgPrice from d_product;
   select category_id cid from d_product;
#4.去掉重复值.
select distinct price from d_product;
#5.查询结果是表达式(运算查询):将所有商品的价格打九折进行显.
select price*0.8 as newPrice from d_product;
#6.空值参与运算(空值就是 null,所有运算符或列值遇到 null值,
运算的结果都是 null)
注意:
   ● 在 MySQL 中,null 不等于空字符串或 0 。一个空字符串的
长度是 0 ,而空值的长度是空。
   ● 在 MySQL 中,null 是占用空间的。
#7.查询员工 id、月薪、奖金率、年薪
SELECT
 empno,
 sal as "月薪",
 comm as "奖金率",
 sal * ( 1 + IFNULL( comm, 0 )) * 12 as "年薪"
FROM
 emp;
#8.着重号(我们需要保证表中的字段、表名等没有和保留字、数据库系
统或常用方法冲突,如果真的相同,请在 SQL 语句中使用一对 ``(着
重号)引起来。)
SELECT * FROM `order` ;
#9.查询常数
   ● 一般来说,我们只从一个表中查询数据,通常是不需要增加一
个固定的常数列了;但是,如果我们想要整合不同的数据源,用常数列
作为这个表的标记,就需要查询常数了。
   ● 示例:给员工表增加列字段 company ,这个固定列的值为
"家里蹲大学"
SELECT
 '家里蹲大学' company,
 ename,
 job
FROM
 emp;

练习题:

#1.查询emp表中员工 12 个月的工资总和,并取名为ANNUAL_SALARY

#2.查询emp表中去除重复的 job 以后的数据

8.DQL—行筛选

由于互联网产品中提供的信息通常比较多,用户在使用互联网产品的过程中,可能会遇到查找信息时路径长,甚至无法找到合适的信息和内容的问题。通过筛选功能可以让用户通过设置筛选条件的方式,从产品中大量的信息中迅速找到符合筛选条件的内容。从而大大降低用户的查找成本,减少用户查找时间,提升用户体验。从上面的描述中可以看到, 筛选功能的目的是让用户在面对互联网产品中海量的信息和内容时,通过让用户设置筛选条件进行快速的查找和搜索,缩短用户查找路径。帮助用户快速找到符合条件的内容和信息,节省用户查找信息时间,提升用户体验

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

例如:

#查询价格是为偶数的商品信息
select * from d_product where price%2 =0;
select * from d_product where MOD(price,2) =0;
#查询价格为800商品
select * from d_product where price=800;
select * from d_product where not (price>800 or
price <800);
#查询价格不是800的所有商品
select * from d_product where price!=800;
select * from d_product where price>800 or price
<800;
select * from d_product where not(price=800);
select * from d_product where price <> 800;
#查询商品价格大于800元的所有商品信息
select * from d_product where price>800;
#查询商品价格在800到2000之间所有商品
select * from d_product where price>=800 and price
<=2000;
select * from d_product where price between 800 and
2000;
#查询商品价格是200或800的所有商品
select * from d_product where price=800 or
price=200;
select * from d_product where price in (200 ,800);
#查询含有'o'字的所有商品
select * from d_product where pname like '%o%';
#查询pname中第一个字符含有'o'字的所有商品
select * from d_product where pname like 'o%';
#查询pname中第二个字符含有'o'字的所有商品
select * from d_product where pname like '_o%';
#查询pname中第四个字符含有'o'字的所有商品
select * from d_product where pname like '___o%';
#商品没有分类的商品
select * from d_product where category_id is null;
#查询有分类的商品
select * from d_product where category_id is not
null;

练习题:

1.商品名称以o结尾
select * from d_product where pname like '%o';
2.筛选价格大于等于800同时小于等于3000的商品
select * from d_product where price>=800 and price
<=3000;
3.筛选价格不等于800的商品
select * from d_product where price!=800
4.筛选出价格在800以上,同时包含o字符的商品id和名称、价格
select pid,pname,price from d_product where
price>800 and pname like '%o%';
5.筛选出价格高于oppo价格的商品
select * from d_product where price>(select price
from d_product where pname='oppo');

额外补充

最小值运算符

  • 语法格式:LEAST(值1,值2,…,值n),其中,“值n” 表示参数列表中有 n 个值。在有两个或多个参数的情况下,返回最小

值。

  • 当参数是整数或者浮点数时,LEAST 将返回其中最小的值;当参数为字符串时,返回字母表中顺序最靠前的字符;当比较值列表中有 NULL 时,不能判断大小,返回值为 NULL 。
SELECT

 LEAST ( 1, 0, 2 ),    # 整数 返回0

 LEAST( 'b', 'a', 'c' ), # 字符串 返回a

 LEAST( 1, NULL, 2 )  # 有null 返回null

FROM

 DUAL;

最大值运算符

  • 语法格式为:GREATEST(值1,值2,…,值n)。其中,n 表示参数列表中有 n 个值。当有两个或多个参数时,返回值为最大值。假如任意一个自变量为 NULL ,则 GREATEST() 的返回值为NULL 。

  • 当参数中是整数或者浮点数时,GREATEST 将返回其中最大的值;当参数为字符串时,返回字母表中顺序最靠后的字符;当比较值列表中有 NULL 时,不能判断大小,返回值为 NULL 。

SELECT
 GREATEST( 1, 0, 2 ),           # 整数 返回2
 GREATEST( 'b', 'a', 'c' ),     # 字符串 返回c
 GREATEST( 1, NULL, 2 )         # 有null 返回null
FROM
 DUAL;

ESCAPE

  • 回避特殊符号需要使用转义字符。如:将 [%] 转为 [ ] ,然后再加上 [ESCAPE ‘ $ ’ ] 即可。
  • 如果使用 \ 表示转义,要省略 ESCAPE 。如果不是 \ ,则要加上 ESCAPE 。
#查询 pname 中第二个字符是 '_' 且第三个字符是 'a' 的商品信SELECT
 *
FROM
 d_product
WHERE
 pname LIKE '_\_a%' ;SELECT
 *
FROM
 d_product
WHERE
 pname LIKE '_$_a%' ESCAPE '$';

REGEXP 运算符

  • REGEXP 运算符用来匹配字符串,语法格式为: expr REGEXP匹配条件 。

  • 如果 expr 满足匹配条件,返回 1 ;如果不满足,则返回 0 。若expr 或匹配条件任意一个为 NULL ,则结果为 NULL 。

  • REGEXP 运算符在进行匹配时,常用的有下面几种通配符:

‘^’ 匹配以该字符后面的字符开头的字符串。
‘$’匹配以该字符前面的字符结尾的字符串。
‘.‘匹配任何一个单字符。
“[...]” 匹配在方括号内的任何字符。例如,“[abc]” 匹配 “a”
或 “b” 或 “c” 。为了命名字符的范围,使用一个 ‘-’ 。“[a-z]”
匹配任何字母,而 “[0-9]” 匹配任何数字。
‘*’ 匹配零个或多个在它前面的字符。例如,“x*” 匹配任何数量的
‘x’ 字符,“[0-9]*” 匹配任何数量的数字, 而 “*” 匹配任何数量
的任何字符
示例:
SELECT
 'hcj' REGEXP '^h',
 'hcj' REGEXP 'j$',
 'huangchuanjian' REGEXP 'jian'
FROM
 DUAL;

xpr REGEXP匹配条件 。

- 如果 expr 满足匹配条件,返回 1 ;如果不满足,则返回 0 。若expr 或匹配条件任意一个为 NULL ,则结果为 NULL 。

- REGEXP 运算符在进行匹配时,常用的有下面几种通配符:

‘^’ 匹配以该字符后面的字符开头的字符串。
‘$’匹配以该字符前面的字符结尾的字符串。
‘.‘匹配任何一个单字符。
“[…]” 匹配在方括号内的任何字符。例如,“[abc]” 匹配 “a”
或 “b” 或 “c” 。为了命名字符的范围,使用一个 ‘-’ 。“[a-z]”
匹配任何字母,而 “[0-9]” 匹配任何数字。
’ 匹配零个或多个在它前面的字符。例如,“x” 匹配任何数量的
‘x’ 字符,“[0-9]” 匹配任何数量的数字, 而 “” 匹配任何数量
的任何字符


###### 示例:

```sql
SELECT
 'hcj' REGEXP '^h',
 'hcj' REGEXP 'j$',
 'huangchuanjian' REGEXP 'jian'
FROM
 DUAL;

练习题:

#一、将 DDL--表结构操作(重点) 全部重写一遍

#二、根据上述数据完成下面的查询作业
#1.查询商品名称为“卫龙辣条”的商品所有信息:
#2.查询价格为800商品
#3.查询价格不是800的所有商品
#4.查询商品价格大于60元的所有商品信息
#5.查询商品价格在200到1000之间所有商品
#6.查询商品价格是200或800的所有商品
#7.查询含有'霸'字的所有商品
#8.查询以'香'开头的所有商品
#9.查询第二个字为'想'的所有商品
#10.商品没有分类的商品
#11.查询有分类的商品
#12.把商品名为苹果改为苹果14
#13.插入华为手机,价格5999,分类为c001
#14.找到名字长度为6个字符的商品信息
#15.找出oppo同分类的商品信息
#16.删除华为手机信息

转载自CSDN-专业IT技术社区

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_68883928/article/details/140448671

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--