zoukankan      html  css  js  c++  java
  • 数据库-增删查改

    数据库--增删查改

    一、数据库

    1、前端native,后端mysql,两者对接。

    2、概念:数据库的作用:把数据以表的形式存储起来,方便查询。

    3、学习重点:查询语言

    二、RDBMS

    1、关系型数据库系统

    2、核心:以二维表的形式存储数据

    3、行:一条记录,一个事物的信息。

    列:一个字段,一个事物的某一种属性。

    4、一个表中所有行是一类事物的集合

    5、一个数据库由很多表组成。

    三、SQL

    1、结构化查询语言,用于关系型数据库

    2、不区分大小写

    3、重点:查询

    四、MySQL

    1、开源、免费、支持多平台

    五、安装MySQL

    1、端口号:一般为3306

    2、服务端:启动、停止、重启

    3、客户端:命令行客户端、native

    六、连接native和MySQL

    1、点击native界面“连接”

    2、主机名或IP地址、端口、用户名、密码。随便写连接名。

    3、点击连接测试。点击确定

    4、点击连接名,启用变色。

    5、创建数据库

    6、创建表、添加字段、设计表

    7、增删查改数据

    七、数据类型

    1、整数:int(无符号-2147483648~2147483647,有符号0-4294967295),长度没有作用

    2、小数:decimal,如decimal52)表示共存5位数,小数2位,整数3位。

    3、字符串:varchar,范围(0~65533),varchar表示最多3个字符,一个中文或一个字符都占据一个字符。

    八、约束

    1、主键(primary key):int类型、无符号、自动递增、唯一的标识一条记录

    1) Student_ID int(10) UNSIGNED NOT NULL PRIMARY KEY auto_increment

    2、非空约束(not null):不允许为空值

    3、唯一(unique):此字段步云山重复

    4、默认值(default):不填写此值会使用默认值

    5、外键(foreign key):两个表之间的关联关系

    6、索引:快速访问数据库表中的特定信息、索引是对数据库中表中一列或者多列的值进行排序的一种结构,类似书籍的目录

    九、备份和恢复

    1、DBA人员维护

    2、备份:

    1) 鼠标点击数据库,右击选择转储SQL文件》结构和数据

    2) 选择文件保存位置,点击保存。

    3、恢复:

    1) 删除原先数据库,新建数据库。除名称不一致外,字符集和排序规则需一致

    2) 选择数据库,右键运行SQL文件

    3) 文件:选择文件所在位置,选择对应文件。点击“开始”

    十、数据库增删查改

    (一)数据库

    1、创建数据库:

    1) Create语法:CREATE DATABASE 数据库名;

    2) 如果数据库不存在则创建,存在则不创建。---    IF NOT EXISTS

    3) 创建数据库,并设定编码集为utf8 ---  CHARSET utf8 COLLATE utf8_general_ci

    2、删除数据库

    1) Drop语法DROP DATABASE 数据库名;

    (二)数据表

    1、创建数据表:

    4) Create语法:CREATE table 表名 (字段名 类型 约束,字段名 类型 约束,字段名 类 约束);

    5) 如果数据不存在则创建,存在则不创建。---    IF NOT EXISTS

    6) 创建数据,并设定编码集为utf8 --- DEFAULT CHARSET 'UTF8'

    2、删除数据表

    2) Drop语法DROP TABLE 数据表名;

    3、举例:

    create table students(
    id int auto_increment primary key
    name varchar(10) not null
    sex varchar(3) default '',
    address varchar(50),
    phone int not null unique,
    age,
    );

    drop table student;

    (三)属性(alter)

    ALTER TABLE 表名 ADD 字段名 类型 约束

    (四)增加(insert into)

    1、insert into语法:insert into 表名( f字段1,字段2,字段3 )VALUES( value1, value2,...valueN );

    2、举例:

    insert into student (name,money,sex,phone) values ('hk',10000,'',188);

    insert into student values('','小明',100,'',120);

    (五)删除(delete)

    1delete语法:delete from 表名 where id>10

    (五)查询(Select)

    1、Select语法:SELECT 字段1,字段2 FROM 表名

    1) 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。

    2) SELECT 命令可以读取一条或者多条记录。

    3) 你可以使用星号(*)来表示表中全部数据:select * from students

    (六)修改或更新(update)

    1、UPDATE 表名 SET字段=, 字段2=2,WHERE `id`>10

    十一、操作符

    (一)筛选过滤Where语法:

    1、筛选条件

    2、关系

    1) 可以在 WHERE 子句中指定任何条件。

    2) 运算关系:

    ① 等于=

    ② 小于<

    ③ 大于>

    ④ 大于等于>=

    ⑤ 小于等于<=

    ⑥ 不等于!=<>

    3) 逻辑关系:

    ① 并、和=and

    ② =or

    ③ 不、非=not

    4) WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。

    5) 如果给定的条件在表中没有任何匹配的记录,那么查询不会返回任何数据。

    3、举例:

    SELECT field1 FROM table_name1 WHERE `id`>5

    (二)排序order by语法

    1、排序方式

    2、排序的条件任何字段,可多个字段

    3、升序关键字:ASC(默认情况)

    4、降序关键字:DESC

    5、举例

    SELECT field table_name ORDER BY `id` ASC

    SELECT student_name, student_class FROM student ORDER BYstudent_age, student_ID ASC

    SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC

    (三)分组GROUP BY

    1、语法:SELECT 字段1, 字段2, ... 字段n, 聚合函数名 (表达式) FROM 表名WHERE 条件 GROUP BY 字段1, 字段2, ... 字段n

    2、配合聚合函数,利用分组进行统计 

    3、having一起使用

    (四)聚合函数(分组过滤)

    1、注意:使用 SELECT 语句,则这个 SELECT 必须使用 GROUP BY 语句!

    2、语句:

    1) Select 聚合函数名(字段名)from 表名  GROUP BY 字段1, 字段2, ... 字段n having 条件1 and 条件2 or 条件3

    2) Select 聚合函数名(字段名)from 表名 where 条件1 and 条件2 or 条件3 GROUP BY 字段1, 字段2, ... 字段n

    函数

    描述

    AVG(column)

    返回某列的平均值avg

    COUNT(column)

    返回某列的行数(不包括 NULL 值)count

    COUNT(*)

    返回被选行数count

    COUNT(DISTINCT column)

    返回列的不同值的数目count

    FIRST(column)

    返回在指定的域中第一个记录的值first

    LAST(column)

    返回在指定的域中最后一个记录的值last

    MAX(column)

    返回某列的最高值max

    MIN(column)

    返回某列的最低值min

    SUM(column)

    返回某列的总和sum

    1、举例:

    找到 OrderPrice 值高于 OrderPrice 平均值的客户

    SELECT Customer FROM Orders WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)

    计算 "Orders" 表中不同客户的数目:

    SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers FROM Orders

    (五)筛选having(与聚合函数一起用)

    1、语句:语法:SELECT 字段1, 字段2, ... 字段n, 聚合函数名 (表达式) FROM 表名 GROUP BY 字段1, 字段2, ... 字段n having 条件1 and 条件2 or 条件3

    1、

    2、HAVING GROUP BY 设置条件的方式= WHERE SELECT 的交互方式。

    3、增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用

    4、如果 HAVING 中包含多个条件,那么这些条件将通过 ANDOR NOT 组合在一起

    5、举例:

    6、SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer HAVING SUM(OrderPrice)<2000

    7、

    (六)分页/最值:Limit 语法

    1、指定开始位置和显示条数

    2、每页起始点=当前页数 - 1* 显示的条数

    3、最值:limit 1

    4、举例:

    -- 0 表示起始点 5表示显示条数 可以判定显示为第一页

    SELECT * FROM `table_name` WHERE `id` LIMIT 0,5;

    二班男生中最高成级

    Select  students.idstudents.namescore.score  from students

    inner join score on students.id=score.studentid

    where students.class=”二班” and sex=”男” 

    Order by score.score asc

    Limit 1

    1、组合:

    SELECT * FROM `table_name`

    [ WHERE ] -- 查询条件                                               位置第一个

    [ GROUP BY ] -- 配合聚合函数,利用分组进行统计         位置第二个

    [ DESC ] -- 指定那种字段或者方式排序                       位置第三个

    [ LIMIT ] -- 分页显示     位置第三个

    (七)模糊查询Like操作符

    1、配合通配符和字符串进行匹配

    2、举例:从 "Persons" 表中选取居住在包含 "lond" 的城市里的人

    SELECT * FROM Persons WHERE City LIKE '%lond%',sex like %%

    3、举例:从 "Persons" 表中选取的这条记录的姓氏以 "C" 开头,然后是一个任意字符,然后是 "r",然后是任意字符,然后是 "er"

    SELECT * FROM Persons WHERE LastName LIKE 'C_r_er'

    (八)范围查询In/not in操作符

    1、语法:SELECT 字段名(值) FROM 表名 WHERE 字段名 IN (value1,value2,...)

    2、允许where中规定多个值

    3、判断操作数是否为IN列表中的其中一个值,如果是,返回值为1;否则返回值为0

    4、select 2 IN(1,3,5,'thks'),'thks' IN(1,3,5,'thks');  返回值=0,1

    5、SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')

    (九)范围查询BETWEEN ...and操作符

    1、BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期

    2、语法:SELECT * FROM 表名 between 小值 and 大值

    3、举例:

    SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'

    SELECT name FROM Persons WHERE age BETWEEN 18 AND 20

    (十)As别名

    1、表别名

    SELECT column_name(s) FROM 表名 AS 别名

    2、字段别名

    SELECT字段名 AS 别名FROM table_name

    (十一)去重distinct

    1、查询出某个字段不重复的记录

    2、语法:SELECT DISTINCT 字段名1 FROM 表名

    3、举例:

    返回不重复的用户名:select distinct name from student

    过滤掉nameid两个字段都重复的记录:select distinct name,id from student

    (十二)通配符%、_、*、[字符集]、[^字符集]、[!字符集]

    1、% (一个或多个字符)

    1、举例:从 "Persons" 表中选取居住在包含 "lond" 的城市里的人

    SELECT * FROM Persons WHERE City LIKE '%lond%',sex like ’%%

    2、-(任何单一字符,只有一个)

    1、举例:从 "Persons" 表中选取的这条记录的姓氏以 "C" 开头,然后是一个任意字符,然后是 "r",然后是任意字符,然后是 "er"

    SELECT * FROM Persons WHERE LastName LIKE 'C_r_er'

    3、*匹配0个或多个在它前面的字符

    4、[字符集](字符集中的任何单一字符,只有一个)

    1、举例:从上面的 "Persons" 表中选取居住的城市以 "A" "L" "N" 开头的人

    SELECT * FROM Persons WHERE City LIKE '[ALN]%'

    5、[^字符集][!字符集](不在字符集中的任何单一字符,只有一个)

    1、举例:从上面的 "Persons" 表中选取居住的城市不以 "A" "L" "N" 开头的人

    SELECT * FROM Persons WHERE City LIKE '[!ALN]%'

    SELECT * FROM Persons WHERE City LIKE '[^ALN]%'

    十二、空判断

    1、无法比较 NULL 和 “ ”;它们是不等价的

    2、null值:SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NULL

    3、不带有 NULL 值:SELECT LastName,FirstName,Address FROM Persons WHERE Address IS not NULL

    4、

    十三、连接查询(多表查询)

    (一)等值连接

    1、语句1Select 字段1,字段2,字段3  from 1, 2 where 关联关系(a=b)

    2、会产生冗余数据——笛卡儿积(没有加入关联条件,两张表之间的数据会进行任意组合的现象)。

    3、举例:查找studentclass表中学号相同的信息

    Select * from student, class where student.studentId = class.studentId

    Select * from student as stu, class as cla where stu.studentId = cla.studentId(带别名)

    注意左右以及内连接:

    1、1、左连接和右连接指的都是外连接

    2、2、外连接:指一个表中有一个字段是另一个表的主键时

    比如学生表里除了学生id还有一个成绩id名为scoreId,这个scoreId就是学生成绩表的主键,我们需要一起查询这两个表的内容,通过成绩id把两个表联系起来就是外连接

    3、左连接和右连接的区别:

    写法上先写哪个表就称之为左,

    如:学生表中有的学生成绩id(scoreId)为空,成绩表中也有成绩在学生中没有出现过时

    如果是左连接,学生表中就算学生成绩为空的学生也会被查出,而成绩表中只出现在学生表中出现的成绩

    如果是右连接,则相反......

     

    (二)内连接-推荐 (inner join ...on)

    1、语句1Select 字段1,字段2,字段3  from 1 inner join 2 on 关联关系

    2、举例:查找studentclass表中学号相同的信息

    Select * from student inner join class on student.studentId = class.studentId

    Select * from student as stu inner join class as cla on  stu.studentId = cla.studentId(带别名)

    3、Inner join取交集

    如:A:12345;          B2346

    Inner join后展示数据2——23——34——4

    (三)左连接(left join)

    1、以左表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足的部分。左连接全称为左外连接,是外连接的一种。

    2、语句如下:

    Select 字段1,字段2,字段3  from 1

    left join 2 on 关联关系

    left join 2 on 关联关系

    where 过滤筛选条件(a=b)

    3、Left join

    如:A(左表):12345;          B2346

    Left join后展示数据1——null2——23——34——45——null

    (四)右连接(right join)

    1、以右表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将右表所有的查询信息列出,而左表只列出ON后条件与右表满足的部分。右连接全称为右外连接,是外连接的一种

    2、语句如下:

    Select 字段1,字段2,字段3  from 1

    right join 2 on 关联关系

    right join 2 on 关联关系

    where 过滤筛选条件(a=b)

    4、right join取交集

    如:A(左表):12345;          B(右表)2346

    right join后展示数据2——23——34——46——null

    (五)3表连接

    4、等值连接语句1

    Select 字段1,字段2  from 1, 2,3

    where 关联关系(a=b)

    and (b=c)

    and (a=c)

     

    5、语句1

    Select 字段1,字段2,字段3  from 1

    inner join 2 on 关联关系

    inner join 2 on 关联关系

    6、等值连接会产生冗余数据——笛卡儿积。

    7、举例:查找studentclassscore表中学号相同的信息

    Select * from student, class, score

    where student.studentId = class.studentId

    and class.studentId=score.studentId

    Select * from student 

    inner join class on student.studentId = class.studentId

    inner join score on class.studentId=score.studentId

    (六)连接查询后过滤

    1、语句1

    Select 字段1,字段2,字段3  from 1

    inner join 2 on 关联关系

    inner join 2 on 关联关系

    where 过滤筛选条件(a=b)

    and (b=c)

    and (a=c)

     

    (七)自关联

    自关联就是多次对同一张表进行查询,也叫单表自查询

    2、语句:select * from student as A,student as B where A.aid=B.pid

     

    (八)子查询

    1. 子查询返回的结果作为主查询的条件——标量子查询、列子查询、行子查询
    2. 子查询返回的结果作为主查询的数据源(表)——表子查询
    3. 子查询,查询是建立别的查询结果之上的,也就是一个 select 语句中包含另外一个 select 语句

    分类

    有两类:按照位置分,按照查询结果分

    按照位置分:子查询(select 子语句)在外部查询语句(select 父语句)中出现的位置 ;

    From 子查询 :子查询跟在 from 之后 ;

    where 子查询:子查询出现在 where 条件中 ;

    等等

    按照查询结果分:根据查询得到的结果进行分类

    标量子查询:子查询得到的结果是 一行一列

    列子查询:子查询得到的结果是 一列多行;

    行子查询:子查询得到的结果是 一行多列;

    几个出现的位置都是在 where 之后 ;

    表子查询:子查询得到的结果是 多行多列

    出现的位置在 from 之后 ;

    (九)标量子查询(一行一列,单个数)

    1. 标量子查询:返回单一值的子查询。子查询返回的是单一值的标量,如一个数字或一个字符串,也是子查询中最简单的返回形式
    2. 知道班级名字,查询出该班所有学生

    -- 第一步,根据班级id查询学生

    select * from student where c_id = ? ;

    -- 第二步 ,查询班级 id

    select id from class where name = '软件工程2021' ;

    -- 合并

    select * from student where c_id = (select id from calss where name = '软件工程2021') ;

    (十)列子查询(一列多行_in)

    查询所有在读(名字在班级表中)的学生

    语句:select * from student where c_id in (select id from calss ) ;

    (十一)行子查询(一行多列)

    查询整个学生中,年龄最大并且身高是最高的

    语句1低级:select * from student where age = (select max(age) from student) and height = (select max(height) from student);

    语句2高级:select * from student where  (age,height) = (select max(age),max(height) from student);

    (十二)表子查询(多行多列)

    找出某个班中身高最高的人;

    -- 先让学生表按照身高降序排序

    select * from student order by height desc ;

    -- 然后按照班级分组

    select * from student group by c_id ;

    -- 合并在一起,就是我们需要的

    select * from (select * from student group by c_id) as student order by height desc ;

    (十三)子查询中关键字

    1. in:主查询 where 条件 in (列子查询)
    2. =any|some:主查询 where =any(列子查询)

    在条件查询的结果中任意匹配一个即可,等价于in

    1. all

    主查询 where =all(列子查询).等于里面的所有

    主查询 where ><all(列子查询).不等于里面的所有

    select * from student where age >=any (select age from student where studeng.class=”一班”) 

  • 相关阅读:
    asList和subList的缺陷
    oracle和mysql的拼接查询
    Google Guava的splitter用法
    docker创建mongodb并且测试代码
    GitHub 近两万Star,无需编码,可一键生成前后端代码,这个开源项目JeecgBoot有点强
    在深圳养一个娃需要多少钱?2020深圳养娃开销(Excel文本)清单公布!家长直呼扎心了!
    Win7安装AD域管理工具-Win7安装AD域远程服务器管理工具
    盘点2020年那些大厂网盘小厂网盘其他网络存储设备
    完美解决远程计算机需要网络级别身份验证RDO
    OPPO手机的指令合集(工程模式、串号等)
  • 原文地址:https://www.cnblogs.com/sulanyuan/p/11084222.html
Copyright © 2011-2022 走看看