数据库简介及常用命令
数据库;简而言之就是存储数据的仓库。
特点; 1.长期存储数据 2.对于数据进行有组织的管理,体现,通过操作指定语言完成增,删,改,查
数据库分类/按照数据存储方式不同
关系型数据库 以二维表的形式进行数据的存储 mysql ,sql sever ,Oracle 非关系型数据库 键值对;redis mangoDB ;文档, Hbase :(大数据存储) 一个结构化数据的分布存储系统
SQL语句
(结构化查询语言)使用sql语句进行对数据库的操作 对数据库的操作 查询:select ;select * from 表名; 新增:instrt ; insert into students(name) value ('老夫子2');
insert into students(name) value ('老夫子3');
修改;update ; update 表名 set 字段名1=值1,字段名2=值2... where 条件 删除;delete :delete from 表名 where 条件
数据类型;
整形;int 字符串;varchar 小数;decimal 事件日期;datetime
数据约束
数据约束主要是指对数据库中数据进行限制,以确保数据的正确性、有效性、一致性。 默认值约束:当不填写时使用默认值,填写时使用内容 非空;此字段不允许填写空值 说明;null (数据为空) 说明;看起来很空,其实是空字符 主键;提高数据查询速度 1.唯一性;主键值必须是唯一的,不能重复 2.非空性;主键不能为空 3.不变性;主键使用了,不可更改 4.单一性;一张数据表,仅可以设置一个主键 唯一性:此阶段的值不允许重复 特点:一个表中可以设置多个字段的值具有唯一性 外键:维护两个表之间的依赖关系
常见数据库操作命令
查看所有数据库:show database; 使用数据库;use 数据库名; 查看当前使用数据库;select database(); 创建数据库;create database 数据库名 charset=utf8; 删除数据库;drop database 数据库名 查看当前数据库所有的表;show tables; 查看表结构;desc 表名; 删除数据表;drop table 表名 drop table if exists 表名 简单查询;select * from; 添加一行数据;insert insert into 表名 values(...) 例1: insert into students values(0, '亚瑟', 22, 177.56) insert into 表名 (字段1, 字段2, …) value(值1, 值2, …) insert into students (name) values ('老夫子') 添加多行数据 方式一: 写多条insert语句,多条语句之间用英文分号分隔 insert into students values(0,'亚瑟2',23,167.56) 方式二: 通过一条insert语句插入多条数据,数据间用逗号分隔 insert into 表名(字段名1,...) value(值1,...),(值1,...)... insert into students(name) value ('老夫子5'),('老夫子6') 修改数据;update 语法;update 表名 set 字段名1=值1,字段名2=值2...where 条件 update students set name='狄仁杰', age=20 where id=5; 删除数据;truncate ,drop, delect truncate table 表名 runcate删除数据时,表结构会保留,自增长字段 从1开始。执行效率低于drop命令。 drop table 表名 如果想删除表,建议使用drop,且删除数据效率最高 delect table 表名 1、delete可以通过where子句删除部分记录。 2、delete删除所有数据时,自增长字段不会从1开始。
条件查询
条件查询(比较运算符)
例1:查询小乔的年龄
select age from students where name='小乔'
例2:查询20岁以下的学生
select * from students where age<20
例3:查询家乡不在北京的学生
select * from students where hometown!='北京'
比较运算符 符号: 大于 小于 等于 大于等于 小于等于 不等于 语法格式: 表名 where 字段名称 比较运算符 预期数据 例子 例1:查询小乔的年龄 select age from students where name='小乔 例2:查询20岁以下的学生 select * from students where age<20
条件查询(逻辑运算符)
逻辑运算符
符号: and or not
语法格式:
and,or
表名 where 条件1 and/or 条件2
not
表名 where not 条件
条件查询(模糊查询)
模糊查询
关键字 like % _
语法格式
表名 where 字段名称 like '匹配符号,指定匹配内容'
例子
查询姓孙的学生
select * from students where name like‘孙’;
查询姓名以‘乔’结尾的学生
select * from students where name like '%乔'
条件查询(范围查询)
范围查询
关键字
1.in:非连续范围
例:查询家乡是北京或上海或广东的学生
select * from students where hometown in('北京','上海','广东')
2.between...and..:连续范围
例:查询年龄为18至20的学生
select * from students where age between 18 and 20
语法格式:
in:表名 where 字段 in (....非连续范围)
between...and..:表名 where 字段 between 开始范围 and 结束范围
条件查询(非空判断)
非空判断
为空
字段 is null
例:查询没有填写身份证的学生
select * from students where card is null
非空
字段 is not null
例:查询填写了身份证的学生
select * from students where card is not null
空字符串
字段 = ''
排序
语法格式 select * from 表名 order by 字段名1 asc|desc, 字段名2 asc|desc,.. 说明 默认按照列值从小到大排列 asc从小到大排列,即升序 desc从大到小排序,即降序 例子 查询所有学生信息,按年龄从小到大排序 select * from students order by age
查询所有学生信息,按年龄从大到小排序,年龄相同时,再按学号从小到大排序
select * from students order by age desc ,studentno asc;
聚合函数
例1:查询学生总数
select count(*) from students;
例2:查询女生的最大年龄
select max(age) from students where sex='女';
例:查询1班的最小年龄
select min(age) from students WHERE class = '1班';
示例:查询北京学生的年龄总和
select sum(age) from students where hometown='北京';
例:查询女生的平均年龄
select avg(age) from students where sex='女‘
分组
分组查询
select 字段1,字段2,聚合函数... from 表名 group by 字段1,字段2...
-- 例1:查询各种性别的人数
select sex,count(*) from students group by sex;
-- 例2:查询各种性别年龄最大的
select sex,max(age) from students group by sex;
-- 例3:查询各个班级的人数
select class,count(*) from students group by class;
-- 例4:查询各个班级中不同性别的人数
select class,sex,count(*) from students group by class,sex;
分组筛选
分页
连接查询
内连接: 连接两个表时,连接的是两个表中都存在的数据。(取交集)
左连接: 连接两个表时,连接的是两个表匹配到的数据加左表特有的数据,对于右表中不存在的 数据,用null来填充
右连接: 连接两个表时,连接的是两个表匹配到的数据加右表特有的数据,对于左表中不存在的数据, 用null来填充
例1:查询学生信息及学生的成绩
方式一: Select * from students stu inner join scores sc on stu.studentNo = sc.studentNo
方式二:select * from students stu, scores sc where stu.studentNo = sc.studentNo
例2:查询课程信息及课程的成绩
select * from courses cs inner join scores sc on cs.courseNo = sc.courseNo
例3:查询王昭君的成绩,要求显示姓名、课程号、成绩
select stu.name, sc.courseNo, sc.score from students stu
inner join scores sc on stu.studentNo = sc.studentNo where stu.name = '王昭君'
自关联
子查询
例1:查询王昭君的成绩,要求显示成绩(标量子查询)
select score from scores where studentNo = (select studentNo from students where name = '王昭君 ')
例2:查询18岁的学生的成绩,要求显示成绩(列子查询)
select score from scores where studentNo in (select studentNo from students where age=18)
例3:查询和王昭君同班、同龄的学生信息(行子查询)
select * from students where (class,age)=(select class,age from students where name='王昭君')