mysql数据库基础(二)

本文详细介绍了数据库操作,包括DML语句中的创建、使用和删除库,创建和操作表,以及数据的插入、修改和删除。此外,还深入探讨了DQL语句,如基本查询、条件查询、聚合函数、排序查询等。内容涵盖各种操作的语法格式、实例和注意事项,是数据库操作初学者的实用指南。
摘要由CSDN通过智能技术生成
一.DML数据:数据库操作语句:操作表的记录
前提:需要创建库,或指定使用的库,在使用的库中创建表,从而 操作表中的数据
在本次对表中数据的操作中我们创建一个库
步骤一:创建库
方式一:
            语法格式:create database if not exists 库名;
            举例:create database if not exests myee_2203;
方式二:
            语法格式:create database 库名;
            举例:create database myee_2203;
步骤二:使用库
    语法格式:use 库名;
    举例: use myee_2203;
步骤三:创建表
    举例:
    CREATE TABLE student(
    id INT,
    NAME VARCHAR(10),
    age INT,
    gener VARCHAR(5),
    address VARCHAR(50)
    );
1.插入数据
1)插入整条数据:
 ①方式一:一次插入一条数据
    语法格式:insert into 表名 values (值1,值2,值3.....值n);
    举例:给student表中插入[220304,"文章",35,"男","西安"]
INSERT INTO student VALUES(220304,"文章",35,"男","西安");
-- 查询表中的数据          
  SELECT*FROM student;
    注意事项:插入这些值必须和表中的字段对应上先后顺序保持一致;
    ②方式二:一次性插入多条数据
    语法格式: insert into表名 values(值1,值2,值3.....值n),(值1,值2,值3.....值n),(值1,值2,值3.....值n);
    举例:    
INSERT INTO student VALUES(2245,"姚笛",33,"女","上海"),(182,"马伊琍",38,"女","上海");
-- 查询表中的数据
SELECT*FROM student;
2)插入部分字段数据,没有插入的字段,默认值就是null,也支持一次插入多条数据
    语法格式:insert into 表名(字段名称1,字段名称2.....)values(值1,值2.....);
    ①方式一:插入部分字段:一条
    语法格式:insert into 表名(字段名称) values(值);
INSERT INTO student(id,NAME,age,gener)VALUES(1,'文爱马',13,'女');

    结果显示如下: 
      
  ② 方式二插入部分字段,多条(其中字段名称数量可选,你想加几条加几条,但是后面的字段数据必须和前面字段名对应)
    语法格式: insert into 表名(字段名称1,字段名称2.....)values(值1,值2.....);
INSERT INTO student(id,NAME,age,gener,address)VALUES(2,'邓超',48,'男','南昌'),(3,'孙俪',48,'女','上海');
INSERT INTO student(id,NAME,age,gener,address)VALUES(2,'等等',13,'男','上海');
    结果显示如下:
    
注意事项:
1)我们所插入的数据必须和字段相互对应,先后顺序保持一致;
2)目前没有加入"数据约束",可以插入非法字符,举例:id重复;(后期需要使用数据约束来限定此行为);
2.修改数据
我们需要注意一般开发中的修改都是带条件修改(推荐使用);
1)一次修改一个字段
    语法格式:update 表名 set 字段名 = 值 where 条件;
    举例:
UPDATE student SET id = 4 WHERE NAME='等等'; -- 操作一
-- 此处我们应该注意,因为在实际开发中我们的姓名可能出现重复,也就是我们常说的业务字段会出现重复,所以在条件语句中,我们的条件一般使用我们的非业务字段(也就是值是唯一的,不会出现重复数据的字段)作为条件.举例:
UPDATE student SET NAME = '小明' WHERE id = 4; -- 操作二
-- 查询表中数据
SELECT * FROM student;

    结果显示如下:

    操作一:
    
         操作二:
    
 2)一次性修改多个字段
    语法格式:update 表名 set 字段名称1=值1,字段名称2=值2,......字段名称n=值n,where 条件;
    举例:
UPDATE student SET NAME='小红' ,age = 8, address = '北京'WHERE id = 4;
-- 查询表中数据
SELECT * FROM student;
   表中数据结果显示如下:
     
3)不带条件 属性批量修改(部分场景可以使用,但是不推荐使用)
    语法格式:update 表名 set 字段名称 = 值 ;
UPDATE student SET address = '上海';

    结果显示如下:

    
3.删除数据
1)删除表中单个数据
    语法格式:delete from 表名 where 条件;
DELETE FROM student WHERE id =182;
    结果显示如下:
    
2)一次性删除全部数据(一共有两种语法格式)
    方式一:
    语法格式 :delete from 表名;
    方式二:
    语法格式: truncate table 表名;
    举例:
-- 创建一个新的学生表student02; 其中id加入了主键和自增长约束(在本次用次只是为了证明delete和truncate之间的区别,在mysql三种我们会详细讲解)
CREATE TABLE student02(
    id INT PRIMARY KEY AUTO_INCREMENT,-- id主键并且自增长;
    NAME VARCHAR(20),
    age INT
    );
 -- 一次插入4条信息
INSERT INTO student02 (NAME,age) VALUES ('高圆圆',42),('张佳宁',32),('文章',35),('王宝强',38) ; 
DELETE FROM student02; -- 删除表中数据
--  重新插入新的数据
INSERT INTO student02(NAME,age) VALUES('高圆圆02',42);
INSERT INTO student02 (NAME,age) VALUES ('姚笛',35);
SELECT*FROM student02; -- 操作一结果
TRUNCATE TABLE student02; -- 删除表中数据
--  重新插入新的数据
INSERT INTO student02  (NAME,age) VALUES('高圆圆02',42);
INSERT INTO student02 (NAME,age) VALUES ('姚笛',35);
SELECT*FROM student02; -- 操作二结果
    操作一结果显示如下:
    操作二结果显示如下:
从数据结果显示来看我们不难发现delete 与 truncate之间的区别:
1>相同点:他们都可以删除表中的数据;
2>不同点:
    ① delete from 表名;仅仅只是将标的全部记录删除了表还在,
    它主要针对id(非业务字段:设置主键并且自增长),它不影响自增长主键的这个值;
    ②truncate table 表名;将表中所有的数据删除,而且还会在删除之后,自创一张一模一样的表,影响自增主键的值!   
二.DQL语句:(数据库查询语句)
1.基本条件查询(select 关键字)
-- 建立一个表student03
CREATE TABLE student03(
    id INT,-- 编号
    NAME VARCHAR(20),-- 姓名
    age INT,-- 年龄
    sex VARCHAR(5), -- 性别
    address VARCHAR(10), -- 地址
    math INT,
    english INT
    );
-- 插入字符段
INSERT INTO student03 (id,NAME,age,sex,address,math,english)VALUES
(1,'马云',55,'男','杭州',66,78),
(2,'马化腾',45,'男','深圳',98,88),
(3,'王健林',68,'男','北京',100,68),
(4,'赵云',79,'男','四川',89,45),
(5,'柳青',20,'女','湖南',76,83),
(6,'柳岩 ',20,'女','湖南',76,65),
(7,'王嘉尔',25,'男','香港',89,100),
(8,'刘嘉玲',50,'女','香港',60,63);
1)查看不表中所有数据
    语法一:select*from 表名;
    注意:*代表所有字段,仅仅是自己图方便时可以使用,实际开发中不能使用*,应把所有的字段名称写上;
    举例:
SELECT * FROM student03;

    结果显示如下:
    
    语法二:实际开发中查询全部字段,把字段名称全部写上
                select 字段列表 from 表名;   
    举例: 
SELECT
  id,
  NAME,
  age,
  sex,
  address,
  math,
  english
FROM
  student03 ;
    结果显示如下:
2) 查询全部字段的时候,给字段起个别名 as'别名名称',其中as可以省略
SELECT
  id AS '编号',
  NAME AS '姓名',
  age AS '年龄',
  sex AS '性别',
  address AS '住址',
  math AS '数学成绩',
  english AS '英语成绩'
FROM
  student03 ;
  -- as 可以省略
SELECT
  id '编号',
  NAME '姓名',
  age '年龄',
  sex '性别',
  address '住址',
  math '数学成绩',
  english '英语成绩'
FROM
  student03 ;
    两种操作结果如下:
    
3)当表名比较长的时候,可以给表起一个别名;
    语法格式:表名 as 别名;其中as可以省略
    举例:
SELECT
  s.`id` '学生编号',
  s.`name` '学生姓名',
  s.`age` '学生年龄',
  s.`sex` '学生性别',
  s.`address` '家庭住址',
  s.`math` '数学成绩',
  s.`english` '英语成绩'
FROM
  student03 s ;-- 给student起了一个别名.
    结果显示如下:
    
4)可以查询部分字段
    语法格式: select 字段名称列表(自己想要查询的字段) from 表名;
    举例
SELECT
    NAME '姓名',
    age '年龄',
    english '英语',
    math '数学'
FROM
    student03;
    结果显示如下:
    
5) 可以查询单个字符段
    语法格式: select 字段名称 from 表名;
    举例
SELECT
  address
FROM
  student03 ;
    结果显示如下:
    
6_ 发现:字段冗余(重复度大),字段去重distinct;
     语法select disrinct  字段名称 from 表名;
SELECT DISTINCT address'住址' FROM student03;

    结果显示:
三.DQL语句:条件查询 where关键字
1.使用赋值运算符=,比较运算符<,<=,>,>=,!=
    1>对于单个范围来讲
SELECT
  *
FROM
  student03
WHERE age > 30 ;
    结果显示:
    
    2>针对两个范围的查询
     方式一: java中逻辑符号&&,||;
-- 需求:查询student03中年龄在20至30岁之间的学生姓名,年龄,住址
SELECT
    NAME '姓名',
    age '年龄',
    address '住址'
FROM
    student03
WHERE
    age<30 && age>20;-- 逻辑双与&&
    结果显示:
    ②方式二"使用mysql自己提供的逻辑运算符and(连接并列关系),or(或关系)
SELECT
  NAME '姓名',
  age '年龄',
  address '住址'
FROM
  student03
WHERE age > 20
  AND age < 30 ;
  结果显示:
     方式三:between 值1 and 值2;
SELECT
  NAME '姓名',
  age '年龄',
  address '住址'
FROM
  student03
WHERE age BETWEEN 15
  AND 25 ;
  结果显示:
    注意:between 值1 and 值2,表示的是 <=值1,>=值2
3.或的使用
    1)方式一:可以使用Java中逻辑运算符 ||
-- 需求:查询student03中年龄是18岁,或者是20岁,或者是45岁的所有学生
SELECT
  *
FROM
  student03
WHERE age = 18 || age = 20 || age = 45 ;
  结果显示:
    
    2) 方式二:使用mysql中提供的逻辑运算符or
SELECT
  *
FROM
  student03
WHERE age = 18
  OR age = 20
  OR age = 45 ;
结果显示:
    
    3) 方式三:以上这种格式可以优化为in(值1,值2...);in集合语句
SELECT
  *
FROM
  student03
WHERE age IN (18, 20, 45) ;
结果显示:
    
3.查询不等于的条件
语法格式:     select     字符名称1,     字符名称2,     ..... from     表名  where     条件语句;        
    1)方式一:使用java中的比较运算符!=;
-- 需求:查询student03中不等于20岁的学生所有信息
SELECT
  *
FROM
  student03
WHERE age != 20 ;
    结果显示:
    
     2)方式二:使用mysql中的不等运算符"<>";
SELECT
  *
FROM
  student03
WHERE age <> 20 ;
结果显示:
    
4.判断某个条件是否为null,mysql不支持java中"变量==null"这种格式;
    1)在mysql中判断某字段为mull,使用的语句时 is nill;
UPDATE student03 SET english = NULL WHERE NAME="刘嘉玲"; -- 改变指定的字段值
SELECT*FROM student03;
-- 需求:查询student03中english为null的学生全部信息
-- select*from student03 where english == null;此方法不可用
SELECT*FROM student03 WHERE english IS NULL;
       结果显示:
     2)在mysql中判断某字段不为null的信息,使用的语法是 is not null;    
-- 需求查询student03中english不为null的学生全部信息;
SELECT*FROM student03 WHERE english IS NOT NULL;
    结果显示
   
注意:int类型字段求和的时候,注意:int类型的值 + null 值 = null;
    举例:
--需求:查询student03中学生姓名以及数学和英语的总分
SELECT
  NAME "姓名",
  (math + english) "总分"
FROM
  student03 ;
    结果显示:
    
针对上述情况,mysq l提供一个函数ifnull(字段名称,值);
3)fnull(字段名称,值);表示如果字段名称是null,给一个初始化值;
SELECT
  NAME '姓名',
  (math + IFNULL(english, 0)) '总分'
FROM
  student03 ;
    结果显示:
5.DQL语句之 where条件后面加入模糊查询---关键字 like;
1)语 法 select 字段列表 from 表名 where 字段名称 like %xxx%;
    %:代表任何多个字符或某个字符(第一个%可以不写)
-- 需求:查询student03中所有姓马的学生信息
-- 方式一:
SELECT
  *
FROM
  student03
WHERE NAME LIKE '%马%' ;

--方式二
SELECT
  *
FROM
  student03
WHERE NAME LIKE '马%' ;
   方式一和方式二的操作结果显示都为:
    2)_代表:某个单个字符
SELECT
  *
FROM
  student03
WHERE NAME LIKE '马_' ;
 结果显示如下:
    
注意:" _"个数代表:字符个数;
-- 需求查询姓名为三个字符的学生信息;
SELECT
  *
FROM
  student03
WHERE NAME LIKE '___' ;
    结果显示如下:( 注意:空格也代表一个字符;)
6.聚合函数查询:针对int类型(单行单列数据)
     语法:select 聚合函数 from 表名 where 还可以指 定条件;
1)count(字段名称):查询表中记录,
-- 字段名称使用的都是id(非业务字段)
SELECT
  COUNT(english) '英语总记录数'
FROM
  student03 ;
-- 使用业务字段来查询的话应嵌套ifnull();(不嵌套ifnull()会出现问题)
SELECT
  COUNT(IFNULL(english, 0)) '英语总记录数'
FROM
  student03 ;
SELECT
  COUNT(id) '总记录数'
FROM
  student03 ;
结果显示:
第一次查询:
第二次:
第三次
2) avg(字段名称):查询这个字段中平均值;
    语法格式:select avg(字段名称) from 表名;
-- 查询表中所有学生的数学成绩平均值
SELECT
  AVG(math) '数学平均分'
FROM
  student03 ;
  
SELECT
  AVG(IFNULL(english,0)) '英语平均成绩'
FROM
  student03 ;
    结果显示:
             
3)sum(字段列表):求和函数;
    语法格式:select sum(字段名称) from 表名;
-- 需求查询所有学生数学成绩总和
SELECT
  SUM(math) "数学总成绩"
FROM
  student03 ;
-- 需求查询全部学生的总分;
SELECT
  SUM(math + IFNULL(english, 0))'总分'
FROM
  student03 ;
    结果显示:
            
4) max(字段名称):最大值;
-- 需求查询所有有学生中数学成绩最好的学生
SELECT
  MAX(math) '数学最高分'
FROM
  student03 ;
    结果显示:
    
5)min(字段名称):最小值;
-- 需求查询所有有学生中数学成绩最差的学生


SELECT
  MIN(IFNULL(english,0)) "数学最低分"
FROM
  student03;
       结果显示:
    
6)select语句嵌套select语句---子查询;
-- 使用where 条件 比较运算符;
-- 为了方便后续方法的使用,我们将student03中刘嘉玲的英语成绩增加上;
UPDATE student03 SET english = 69 WHERE NAME='刘嘉玲';    
SELECT*FROM student03;-- 查询表中所有数据
-- 需求:查询student03中数学成绩最高分的学生信息;
-- 分步走
-- 1)先查询除数学成绩最好是多少
-- 2)根据数学成绩最好的值,查询该学生信息
-- 步骤一


SELECT
  MAX(math)
FROM
  student03 ;
-- 步骤二
SELECT
  *
FROM
  student03
WHERE math = 100 ;
-- 一步走(使用嵌套)
SELECT
  *
FROM
  student03
WHERE math =
  (SELECT
    MAX(math)
  FROM
    student03) ;
    结果显示:
    
7.DQL之排序查询 order by
    语法格式: select 字段列表 from 表名 order by 字段名称 顺序规则(asc(默认值就是升序))或的desc 降序;
-- 需求:按照数学成绩升序排序
SELECT
  *
FROM
  student03
ORDER BY math ;-- 默认不写排序规则为升序,升序也可以使用关键字asc
结果显示:
-- 需求:按照英语成绩升序排序
SELECT
  *
FROM
  student03
ORDER BY english ASC ;
结果显示:
-- 需求按照数学成绩降序排序
SELECT
  *
FROM
  student03
ORDER BY math DESC ;
结果显示
 注意:同时条件和order by,order by在where的后面
-- 需求:数学成绩大于56分的学生进行数学的降序排序
SELECT
  *
FROM
  student03
WHERE math > 90 -- 先满足条件才能够进行排序;
ORDER BY math DESC;
结果显示
注意:多个字段要同时排序,首先第一个字段排序规则,然后才是第二个字段
-- 需求:数学成绩降序,英语成绩升序排序
SELECT
  *
FROM
  student03
ORDER BY math DESC,
  english ASC;
结果显示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值