MYSQL语法与例题.docx
《MYSQL语法与例题.docx》由会员分享,可在线阅读,更多相关《MYSQL语法与例题.docx(10页珍藏版)》请在冰点文库上搜索。
MYSQL语法与例题
一、DQL:
数据查询语言,针对单表的查询
查询表中所有学生的信息。
select*fromSTUDENT;
查询表中所有学生的姓名和对应的英语成绩。
selectNAME,ENGLISHfromSTUDENT;
显示英语成绩,过滤表中重复数据
selectdistinctENGLISHfromSTUDENT;
在所有学生数学分数上加10分特长分。
selectNAME,MATH+10fromSTUDENT;
统计每个学生的总分。
selectNAME,MATH+CHINESE+ENGLISHfromSTUDENT;
使用别名表示学生分数。
selectNAMEas姓名,MATH+CHINESE+ENGLISH总分fromSTUDENT;
查询姓名为wu的学生成绩
select*fromSTUDENTwhereNAME='陈冠希';
查询英语成绩大于90分的同学
select*fromSTUDENTwhereENGLISH>90;
查询总分大于200分的所有同学
select*fromSTUDENTwhere(MATH+CHINESE+ENGLISH)>200;
查询英语分数在80-90之间的同学。
selectNAME,ENGLISHfromSTUDENTwhereENGLISHbetween80and90;
查询数学分数为89,90,91的同学。
selectNAME,MATHfromSTUDENTwhereMATHin(89,90,91);
查询所有姓李的学生成绩。
selectNAME,MATHfromSTUDENTwhereNAMElike'李%';
查询数学分>80,语文分>80的同学。
selectNAME,MATH,CHINESEfromSTUDENTwhereMATH>80andCHINESE>80;
注意:
notandor优先级依次降低。
一元运算符比二元的要高。
对数学成绩排序后输出。
selectNAME,MATHfromSTUDENTorderbyMATH;
对总分排序后输出,然后再按从高到低的顺序输出
selectNAME,MATH+CHINESE+ENGLISH总分fromSTUDENTorderby总分desc;
对姓李的学生语文成绩排序输出
selectNAME,CHINESEfromSTUDENTwhereNAMElike'李%'orderbyCHINESE;
注意:
订单,order。
创建表时要注意不要和关键字冲突。
解决办法:
1、把用户定义的内容用反引号引起来。
`(Esc按键的下方)
2、数据库命名习惯:
表名ORDERS(建议)
二、完整性约束
数据完整性是为了保证插入到数据中的数据是正确的,它防止了用户可能的输入错误。
2.1实体(记录)完整性
规定表的一行(即每一条记录)在表中是唯一的实体(Entity)。
实体完整性通过表的主键来实现。
主键:
不能为null;唯一
创建一个表格T1,并声明一个主键
写法一:
(只能指定一个字段作为主键)
createtableT1(
IDintprimarykey,
NAMEvarchar(100)
);
写法二:
(指定联合主键)
createtableT2(
IDint,
NAMEvarchar(100),
primarykey(ID)
);
写法三:
(创建没有任何约束的表格,最后修改约束)建议
createtableT3(
IDint,
NAMEvarchar(100)
);
altertableT3addprimarykey(ID);
注意:
逻辑主键(建议):
除了唯一标识一条记录外,没有别的意义。
一般取名ID
业务主键:
还有一定的业务意义。
MySQL:
createtableT4(
IDintprimarykeyauto_increment,#自动增长,不建议使用。
数据库迁移不方便,并不是所有的数据库都支持自动增长,比如Oracle就不支持。
NAMEvarchar(100)
);
2.2域(字段)完整性
指数据库表的列(即字段)必须符合某种特定的数据类型或约束
1、约束数据的类型:
强类型
2、非空约束:
notnull
3、唯一约束:
unique
createtableT5(
IDintprimarykeyauto_increment,
USERNAMEvarchar(100)notnullunique,
PHONE_NUMvarchar(11)unique,
GENDERvarchar(10)notnull
);
2.3参照完整性(多表的设计):
定义外键
注意:
类和表结构的关系;对象和记录的关系(帮助学习ORM:
Hibernate、MyBatis)
ORM:
ObjectRelationMapping(Java面向对象DB关系型数据库映射)
第一:
(非常多)一对多
createtableCUSTOMERS(
IDintprimarykey,
NAMEvarchar(100),
ADDRESSvarchar(100)
);
createtableORDERS(
IDintprimarykey,
ORDER_NUMvarchar(100),
AMOUNTfloat(10,2),
CUSTOMER_IDint,
constraintCUSTOMER_ID_FKforeignkey(CUSTOMER_ID)referencesCUSTOMERS(id)
);
注意:
表结构:
Java类定义
表中的记录:
Java对象
表间的关系:
Java对象间的关系
第二:
多对多(比较常见)
createtableTEACHERS(
IDintprimarykey,
NAMEvarchar(100),
SALARYfloat(10,2)
);
createtableSTUDENTS(
IDintprimarykey,
NAMEvarchar(100),
GRADEchar
(1)
);
createtableTEACHERS_STUDENTS(
T_IDint,
S_IDint,
primarykey(T_ID,S_ID),
constraintT_ID_FKforeignkey(T_ID)referencesTEACHERS(id),
constraintS_ID_FKforeignkey(S_ID)referencesSTUDENTS(id)
);
第三种:
一对一(很少用到。
实际开发根本不用)
数据库设计:
ERWin
三、多表的查询(面试)
1、连接查询(面试几率很大)
a、交叉连接:
(crossjoin)
返回多表的记录的笛卡尔积。
(第一张表:
5 第二章表:
7,返回5*7=35)
select*fromCUSTOMER,ORDERS;
selectc.ID,c.NAME,o.ORDER_NUMBER,o.pricefromCUSTOMERc,ORDERSo;
b、内连接(innerjoin)
隐式内连接:
select*fromCUSTOMERc,ORDERSowherec.ID=o.CUSTOMER_id;
显式内连接:
select*fromCUSTOMERcinnerjoinORDERSoonc.Id=o.CUSTOMER_id;
c、外连接(outerjoin)
查看所有客户信息,同时有订单的显示订单的详细信息。
左外:
返回满足连接条件的记录,同时返回左表中剩余的其他记录。
select*fromCUSTOMERcleftouterjoinORDERSoonc.ID=o.CUSTOMER_ID;
查看所有订单信息,同时返回下单的客户信息
右外:
返回满足连接条件的记录,同时返回右表中剩余的其他记录。
select*fromCUSTOMERcrightouterjoinORDERSoonc.ID=o.CUSTOMER_ID;
2、子查询
又称之为嵌套查询。
查询中有查询。
执行顺序:
先执行子查询(内查询),再执行外查询。
子查询:
必须放在小括号之内。
查询陈冠希的所有订单信息。
形式一:
多条查询语句
selectIDfromCUSTOMERwhereNAME='陈冠希';
select*fromORDERSwhereCUSTOMER_ID=1;
形式二:
subselect(子查询)
select*fromORDERSwhereCUSTOMER_ID=(selectIDfromCUSTOMERwhereNAME='陈冠希');
查询订单价格大于100的有哪些客户
select*fromCUSTOMERwhereIDin(selectCUSTOMER_IDfromORDERSwherePRICE>100);
3、MySQL常用的函数
SUM():
求和
COUNT():
计数
AVG():
求平均
MAX():
求最大
MIN():
求最小
统计一个班级共有多少学生?
selectcount(*)fromSTUDENT;
统计数学成绩大于90的学生有多少个?
selectcount(*)fromSTUDENTwhereMATH>=90;
统计总分大于250的人数有多少?
where可以使用表达式
selectcount(*)fromSTUDENTwhere(ENGLISH+CHINESE+MATH)>250;
统计一个班级数学总成绩?
selectsum(MATH)fromSTUDENT;
统计一个班级语文、英语、数学各科的总成绩
selectsum(CHINESE),sum(ENGLISH),sum(MATH)fromSTUDENT;
统计一个班级语文、英语、数学的成绩总和
selectsum(ENGLISH+CHINESE+MATH)fromSTUDENT;
统计一个班级语文成绩平均分
继续阅读