一文知数据库
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
创建数据库 数据库中数据的编码采用的是安装数据库时指定编码 gbk
- CREATE DATABASE myDatabase character SET gbk;
复制代码 4.2查看数据库
查看数据库MySQL服务器中的所有的数据库:
查看某个数据库的定义的信息:
- SHOW CREATE DATABASE 数据库名;
复制代码 比方:
- SHOW CREATE DATABASE java1;
复制代码 4.3 删除数据库
格式:
比方:
4.4使用数据库
查看正在使用的数据库:
切换数据库
练习题:
- ###数据库操作# 创建数据库 (默认字符集: 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 主键,被主键修饰字段中的数据,不能重复、不能为
- null。
- Not null 非空约束
- Unique 唯一约束
- Default 默认约束
复制代码 5.2查看表
查看数据库中的所有表
格式:
查看创建表语句
格式:
查看表结构
格式:
5.3删除表
格式
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 删除字段
作用:修改表删除列.
比方:
#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 INTO 表 VALUES (值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,'张
- 三','zhangsan@qq.com','1');
- insert into student(sid,sname,email,isdel)
- values(1001,'李四','lisi@qq.com','0');
- insert into student values(1003,'王
- 五','wangwu@qq.com','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='wangwuwu@qq.com' 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]” 匹配任何数目的数字, 而 “” 匹配任何数目
的任何字符
- ###### 示例:```sqlSELECT
- '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.删除华为手机信息
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |