MySQL数据库简答题
⼀、常见数据系统及特点
Oracle:  ①应⽤⼴泛、功能强⼤,分布式数据库系统
②“关系-对象”型数据库
MySQL:①快捷、可靠、容易使⽤
②开源、免费、体积⼩,速度快,成本低。
SQL Server:①针对不同⽤户体的五个特殊的版本
②易⽤性好
DB2:应⽤于⼤型应⽤系统,具有较好的可伸缩性
⼆、数据完整性及约束
primary key : 标识该属性为该表的主键,可唯⼀标识对应的元组
foreign key : 标识该属性为该表的外键,是与之联系的某表的主键
not null : 标识该属性的值不能为空,保证记录中该字段都有值
unique : 标识该属性的值是唯⼀的,该字段的值不能重复出现
auto_increment : 标识该属性的值⾃动增加,⼀个表中只能由⼀个字段⽤它约束,且必为主键
default : 为该属性设置默认值
check : 检查约束
三、常⽤的sql语句的使⽤
①表中插⼊数据
格式1:INSERT INTO 表名(字段名1,字段名2……字段名n) VALUES(字段值1,字段值2……字段值n);
格式2:INSERT INTO 表名 VALUES(字段值1,字段值2……字段值n);
格式3:INSERT INTO 表名 VALUES(字段值1,字段值2……字段值n),(字段值1,字段值2……字段值n),(字段值1,字段值2……字段值n);
②查询表中数据
SELECT  属性列表    FROM    表名    [WHERE 条件表达式]
③修改数据
mysql删除重复的数据保留一条UPDATE 表名 SET 字段名1=字段值1,  字段名2=字段值2,……字段名n=字段值n,[WHERE 条件表达式];
④删除数据
DELETE    FROM    表名      [WHERE 条件表达式];
四、常⽤查询及连接查询的使⽤
(⼀)条件查询 where
1.等值查询 =
select * from student where id=1;
2.不等值查询 != (< >)
查询年龄不是20岁的学⽣信息
select * from student where age!=20;
3.关系⽐较查询 < <= > >=
查询年龄⼤于20岁的学⽣信息
select * from student where age>20;
4.逻辑运算查询 and or
and 满⾜所有条件  or只需要满⾜其中⼀个条件
查询年龄⼩于21岁并且住址是郑州
select * from student where age<21 and address="郑州";
查询年龄⼩于21岁或者住址是郑州的
select * from student where age<21 or address="郑州";
5.区间查询 between .. and (包含边界值)
查询年龄是18岁到21岁之间
select * from student where age between 18 and 21;
select * from student where age>=18 and age<=21;
6.模糊查询 like
① %(匹配0-n个字符)
查询学⽣表中名字包含x的学⽣信息
select * from student where stuname like '%x%';
② _ (匹配⼀个字符,相当于⼀个占位符)
查询学⽣表中地址第⼆个字为京的信息
select * from student where adderss like '_京';
(⼆)排序查询 order by  asc升序(默认) desc降序
语法:select * from 表名 (where 条件) order by 排序的字段 asc/desc
1.查询学⽣信息按年龄从⼤到⼩排序
select * from student order by age desc;
注意:排序条件可以是多个字段,多个字段之间使⽤逗号隔开,asc/desc关键字作⽤于前⾯的字段
2.limit 限制查询⼏条信息
limit 1个参数    limit 2个参数  第⼀个参数代表从哪⾥开始,第⼆个参数代表要查询⼏条数据(mysql中数据从0开始数) 查询前3条数据  select * from 表名 limit 3;
查询从第2条开始的3条数据  select * from 表名 limit 1,3;
(三)聚合函数是针对于⼀组数据产⽣⼀个结果
1.sum() 求和
查询所有学⽣年龄总和
select sum(stuage) from student;
2.avg() 求平均值
查询所有学⽣年龄平均值
select avg(stuage) from student;
3.max() 求最⼤值
查询所有学⽣年龄最⼤的
select max(stuage) from student;
4.min() 求最⼩值
查询所有学⽣年龄最⼩的
select min(stuage) from student;
查询所有数据 两种写法等效
select count(*) from student;
select count(1) from student;
注意:如果指定字段的值为空,会⾃动忽略
(四)分组语句 group by
语法:select 字段名 from 表名 group by 分组条件;
说明:group by 后⾯跟分组条件字段
查询班级信息分组显⽰
select className from class group by className;
书写注意事项
①只有出现在group by后⾯的字段,才能单独出现在select后⾯
②如果要在group by语句中进⾏结果的排序,那么排序字段也必须是group by后指定的字段和结果的字段
③如果group by⼦句种的字段使⽤了某个单⾏函数,那么select⼦句种的字段也必须使⽤相同的单⾏函数
(五)having语句对分组后的数据再次进⾏筛选
语法:select 字段 from 表名 where 条件 group by 分组条件 having 条件
查询借书卡信息表中班级⼈数⼤于1的班级
select class from card group by class having count(cno)>1;  先对班级进⾏⼀个分组,在使⽤聚合函数计算班级⼈数注意:①和聚合函数混合使⽤只能⽤having语句
②当使⽤where或having都能满⾜⼀个需求时,优先使⽤where
(六)起别名
语法:  ① select 字段名1 as 新名字,字段名2 as 新名字... from 表名;
② select 字段名1 新名字,字段名2 新名字... from 表名;
③ select 字段名1 "新名字",字段名2 "新名字"... from 表名;
(七)其他
1.表达式 计算总价
创表的时候 设计价格这个字段  float
将float类型改为decimal(数值1,数值2)  数值1代表⼩数点前⾯整数位为多少位,数值2代表⼩数点后⾯保留⼏位⼩数查询总价格
select 单价*数量 from 表名;
2.去重 distinct(如果遇到重复的去除掉,只显⽰⼀遍)
查询借阅卡表中包含的班级有哪些
select distinct class from card;
(⼋)连接查询
连接查询:同时涉及多个表的查询
连接条件:同时连接两个表的条件 表1.字段=表2.字段
1.内连接 inner join
特点:两个表交叉的部分被查询出来
语法:select 字段... from tab1 t1 inner join tab2 t2 on 连接条件;
2.外连接
①左外连接 left[outer] join [outer]可以被省略
特点:左表中的记录全部出现在结果中,如果对应的某⾏记录在右表中没有对应关系,则右表会⾃动补空(值)
语法:select 字段... from tab1 t1 left join tab2 t2 on 连接条件;
②右外连接 right[outer] join
特点:右表中的记录全部出现在结果中,如果对应的某⾏记录在左表中没有对应关系,则左表会⾃动补空
语法:select 字段... from tab1 t1 right join tab2 t2 on 连接条件;
3.交叉连接 cross join
特点:A表中的记录⼀⼀匹配B表中的所有记录
语法:select 字段... from tab1 t1 cross join tab2 t2;
4.where外键条件多表查询 多个条件之间⽤and连接
特点:相当于内连接,效果⼀致
语法:select * from tab1 t1,tab2 t2,... where 外键条件(关系) and 条件1 and 条件2...;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。