当前位置:   article > 正文

SQL语句,精简版_sql精简版

sql精简版
  1. 显示所有的数据仓库:show databases; 注意:书写的所有sql语句, 要求结尾必须有分号。
  2. 使用mysql这个数据库(切换数据库):use mysql;
  3. 创建一个名称为mydb1的数据库:
  4. create database mydb1;
  5. 创建一个使用utf8字符集的mydb2数据库:
  6. create database mydb2 character set utf8;
  7. 删除数据库:drop database 数据库名;
  8. 修改数据库编码集:
  9. alter database 数据库名称 character set 字符集;
  10. 查询当前正在使用的数据库:
  11. select database();
  12. 查看指定数据库建表语句及字符集:
  13. show create database 数据库名;
  14. 语法:use 数据库名;
  15. 创建数据库表的语法:
  16. 语法:
  17. create table 表名(
  18. 列名 类型(长度), ----某一列,存放的数据是什么类型.长度表示允许列名存储数据的最大长度.
  19. 列名 类型(长度),
  20. ..........................
  21. 列名 类型(长度)---最后一个列不需要逗号。
  22. );
  23. (****通常我们不会把文件存储到数据库。(占用资源,操作速度慢)
  24. 我们会把文件的路径(通常存放在本地磁盘)存到数据库中。****)
  25. 查看该数据库的所有的表
  26. show tables;
  27. 查看表的列的信息(查看表结构)
  28. desc 表名;
  29. 主键约束:primary key 列的数据 不允许重复的,并且不为空
  30. 自增长 auto_increment 表的主键是int 类型
  31. 唯一约束:unique
  32. 该列(字段)的值不允许重复。可以为nullnull不算重复)
  33. 修改数据表:
  34. alter table 表名 增//改 列名 类型(长度) 约束;
  35. 增加列语法
  36. alter table 表名 add 列名 类型(长度) 约束;
  37. alter table emp2 add salary double;
  38. 修改现有列类型、长度和约束
  39. alter table 表名 modify 列名 类型(长度) 约束;
  40. alter table emp2 modify birthday date not null;
  41. alter table emp2 modify name varchar(60) unique not null;
  42. 修改现有列名称
  43. alter table 表名 change 旧列名 新列名 类型(长度) 约束;
  44. alter table emp2 change name username varchar(60) unique not null;
  45. 删除现有列语法:
  46. alter table 表名 drop 列名;
  47. alter table emp drop age;
  48. 修改表名 语法:rename table 旧表名 to 新表名
  49. rename table emp2 to person;
  50. 修改表的字符集 语法:alter table 表名 character set 编码集;
  51. show create table emp;//查询此时表的编码
  52. 改:alter table emp character set utf8;
  53. //数据表删除
  54. drop table 表名;
  55. drop table emp;
  56. 查询表中所有信息
  57. select * from 表名;
  58. 向表中插入数据
  59. (所有列去全部被定义)
  60. 第一种语法:insert into 表名 (列名1,列名2,列名3......) values (值1,值2,值3......);
  61. insert into person(id,username,password,gendar,birthday,salary)
  62. values(null,'zhangsan',123,'nan','1992-8-19',12000);
  63. (部分列选择定义,注意非空必须定义,且受唯一约束的,不可重复添加到数据库)
  64. 第二种语法:insert into 表名(列名,列名,列名。。。。) values(值,值,值。。。。)
  65. 注意:在插入数据的时候,如果某些列可以为null,或者是自动增长的列,或者有默认值的,在插入的时候可以省略。
  66. insert into person(username,password,birthday) values('suoge',123,'1995-10-19');
  67. (省略列名,只需要全部提供,经常用到***
  68. 第三种语法()
  69. insert into 表名 values(值,值,值,值);
  70. 如果给表中的所有列插入数据,这时可以省略表名后面的列名,直接写values
  71. insert into person values(null,'wangwu',123,'nv','1987-8-9',13000);
  72. 更改表中的数据
  73. 语法: update 表名 set 列名=值,列名=值.... [ where条件语句 ];
  74. 1.将所有人的密码改为abcdef
  75. update person set password ='abcdef';(where相当于if)
  76. 2.将姓名为张三的薪资改为8888
  77. update person set salary =88888 where username ='张三';
  78. 3.将id为3的人姓名改为赵六,密码改为zhaoliu
  79. update person set username='赵六',password='zhaoliu' where id = 3;
  80. 4.将张三的年龄在原基础上增加2
  81. update person set age = age + 2 where username = "张三";
  82. 删除表中的数据
  83. 语法:delete from 表名 [where条件语句]
  84. 1.删除表中名字为zhaoliu的记录
  85. delete from person where username='zhaoliu';
  86. 2.删除年龄是30岁的员工
  87. delete from person where age='30';
  88. 3.删除表中的所有记录
  89. dele from person;
  90. 删除表记录:truncate table person;(表中数据全部干掉,自建新的一模一样的表)
  91. deletetruncate 区别?
  92. 1.
  93. 1).delete删除是一条记录一条记录逐行删除
  94. 2).truncate直接将表删除,然后在新建一张同样的表
  95. 2.
  96. 1)删除数据可以回退(可以找回数据)
  97. 2)删除数据不能回退(不可以找回数据),但是删除数据比delete
  98. dele from person; 和 drop table user;区别?
  99. 1.delete 删除是一条记录一条记录逐行删除,表还在,但是数据记录不见了
  100. 2.drop删除,表不存在了
  101. SQL分类
  102. DDL(数据定义语言)
  103. 如:create drop alter truncate
  104. DML(数据操纵语言)
  105. 如:update insert delete (注意:不包含查询)
  106. DCL(数据控制语言)
  107. 如:grant revoke if...else... begin transaction
  108. DQL(数据查询语言)
  109. 如:select
  110. select查询
  111. select * from 表名; //显示表中所有行和列的信息
  112. select 列名,列名..from表名; //显示指定列数,列出指定行信息
  113. 1.查询所有学生到的姓名和成绩
  114. select name,score from student;
  115. 按条件查询
  116. select 列名,列名...from 表名 where 条件;
  117. 说明:查询符合where条件的数据
  118. 作用:过滤,只有符合条件的,才去列出相应的信息
  119. 2.查询表中年龄大于等于24岁的学生信息
  120. select * from student where age>=24;
  121. 运算符:
  122. 1)>(大于) <(小于) >=(大于等于) <=(小于等于) =(相等) <>或者!= (不相等)
  123. 3.查询年龄不是25岁的学生
  124. select * from student age <> 25; //标准写法
  125. and逻辑与 ,多个条件同时成立
  126. or逻辑或,多个条件任意一个成立
  127. not逻辑非,相反的意思
  128. 4.查询年龄>23,并且成绩>80的同学信息
  129. select * from student age>23 and score>80;
  130. 5.查询成绩在80~100(包含)之间的学生信息
  131. select * from student score>=80 and score<=100;
  132. 区间:between ... and ...在两者之间取值。 列名 between 开始值 and 结束值;
  133. 上面的可以转换为
  134. select * from student score between 80 and 100;
  135. in(值1,值2,值3)在指定值中任意取;
  136. 如:in(70,80,90)值可以取7080或者90
  137. 使用格式:
  138. where 列名 in(值1,值2,值3);
  139. 等价于
  140. where 列名 =or 列名=or 列名=值...
  141. 6.查询年龄为18,23,25的同学信息
  142. select * from student where age=18 or age=23 age 25;
  143. select * from student where age in (18,23,25);
  144. 模糊查询:like'模糊查询部分'
  145. like'*%'
  146. like'*_'
  147. % 表示零或任意多个字符
  148. _任意单个字符
  149. 例:name like '张%'所有姓张学员
  150. name like '%张%'只要有张就可以。
  151. name like '张_'所有姓张名字为两个字学员
  152. name like '_张_'只有中间是张,前面一个字,后面一个字。
  153. 7.查询所有含有岩的学生信息
  154. select * from student where name like'岩%';
  155. is null判断该列值是否为空
  156. 8.查询没有生日学员信息。就是生日是null
  157. select * from student where birthday is null;
  158. 9.查询有年龄学员的信息,就是年龄不是空
  159. select * from student where age is not null;
  160. 过滤重复数据
  161. 查询排重:select distinct 列名 from 表名 {where 条件}
  162. distinct 去重复。 显示distinct后面列的内容,并且过滤掉重复的数据
  163. 10.显示不重复的年龄
  164. select distinct age from student;
  165. 对查询的结果进行排序
  166. 使用order by 子句排序查询结果
  167. 格式:select * from 表名 order by 列名1asc|desc),列名2asc|desc),列名3asc|desc
  168. 按照列名1,列名,列名3 进行排序输出
  169. asc升序排列 desc是降序 默认是asc升序
  170. 按照第一列进行排序,如果第一列相同,在按照第二列在进行排序,依次类推
  171. 注意:order by a asc,b asc
  172. a,b
  173. 1,2
  174. 1,3
  175. 4,5
  176. 3,1
  177. 排序结果
  178. 1,2
  179. 1,3
  180. 3,1
  181. 4,5
  182. 别名:可以对查询出来的列名起别名
  183. 11.给年龄和分数分别起别名
  184. select age as 年龄,score as 分数 from student;
  185. 当然也可以省略关键字as
  186. select age 年龄,score as 分数 from student;(不建议这么使用)
  187. 面试题:
  188. 1.select age,score from student;
  189. 2.select age score from student;
  190. 上述SQL语句有什么区别?
  191. 第一条给年龄和分数起别名,只是没写名字为默认的而已
  192. 第二条是给表的age命名为score,此时age列的别名是score
  193. 聚合函数:
  194. count(数目) :统计个数(行数),统计有多少行,或者有多少条数据
  195. sum(和)函数:求和
  196. avg()函数:求平均值
  197. max(最大值):求最大值
  198. min(最小值):求最小值
  199. count函数:
  200. 语法:select count(*)或者count(列名) from 表名;
  201. 一般建议使用*
  202. 注意:1.count(具体列名):在根据指定的列统计的时候,如果这一列中有
  203. null的行,该行不会被统计在其中。按照列去统计有多少行数据。
  204. 2.select count(列名)from 表名 :按具体列来进行统计行数
  205. select count(*) from 表名:统计表中的行数。
  206. 12.统计一个班共有多少学生
  207. select count(*) from student;
  208. 13.查询成绩大于80的学生信息
  209. select * from student where score>80;
  210. 14.统计成绩大于80的学生有多少个
  211. select count(*) from student where score>80;
  212. sum函数:
  213. 语法:select sum(列名),sum(列名),...from 表名;
  214. 注意:1.如果使用sum多列进行求和的时候,如果某一列中含有null
  215. 这一列所在的行中的其它数据不会被加到总和中
  216. 15.统计一个班级成绩和
  217. select sum(score) from student;
  218. 16.分别统计年龄和,成绩和
  219. select sum(age),sum(score) from student;
  220. 17.统计年龄与成绩的总和值
  221. select sum(age)+sum(score) from student;
  222. select sum(age+score) from student; 这两个结果不同
  223. 必须进行判断
  224. ifnull(列名,默认值)
  225. select sum(ifnull(age,0) +ifnull(score,0)) from student;
  226. truncate(列名,截取的小数位) 保留几位小数
  227. select truncate(sum(ifnull(age,0) + ifnull(score,0)),2) from student;
  228. 截取两位数
  229. avg函数:
  230. 语法:select avg(列名) from 表名;
  231. 注意:求某列的平均值,avg里面的null不作为统计。
  232. 18.求一个班级平均年龄
  233. select sum(age)/count(*) from student; 正确
  234. select sum(age)/count(age) from student;不正确
  235. select avg(ifnull(age,0)) from student; 《《《主选 正确
  236. 注意:聚合函数不能组合在一起使用。
  237. max,min函数
  238. max(列名)/min(列名) 统计该列的最大值或者最小值
  239. 语法:select max(列名),min(列名) from 表名;
  240. 注意:null排除在外
  241. 20.求班级最高分和最低分
  242. select max(score),min(score) from student;
  243. group by分组函数(******非常重要)
  244. 21.查询购买的每种商品的总价
  245. select product,sum(price) from orders group by product;
  246. 注意:分组特点:(按照正常逻辑来讲,商品有多件相同,但是价格不同,所以显示时显示其中的一个id都是不对的)
  247. 那么就有:分组最终显示的是*****被分组的列和聚合函数
  248. 1.先按照product进行分组,分组完成之后在给每一组进行求和
  249. 22.查询每一种商品的总价大于30的商品,并显示总价。
  250. select product,sum(price) from student group by product having sum(price) >30;
  251. where使用注意点:
  252. 1.where中不可以使用‘别名’
  253. 2.where中不可以使用聚合函数
  254. 3.where**分组之前**进行条件过滤
  255. having使用的说明:
  256. 1.having中可以使用别名
  257. 2.having中可以使用聚合函数
  258. 3.having在分组之后进行条件过滤
  259. wherehaving有什么区别?
  260. 1.where在分组之前进行过滤,having在分组之后进行条件过滤
  261. group byhaving 组合使用。
  262. 2.where之后不可以使用别名和聚合函数,having中可以使用‘别名和聚合使用’。
  263. 开发小技巧:
  264. 当在需求中遇到每种,每个等字眼的时候就使用分组。
  265. 查询关键字的出现的顺序是固定:
  266. select...要显示的内容...from...表名...where 条件...group by ...
  267. 分组的列 ...having...分组后的条件...order by...排序
  268. select ⑤... from ...① where ...②...group by..③...having...④...order by..⑥
  269. 查询的执行顺序
  270. 1.from:表名
  271. 2.where:条件过滤
  272. 3.group by:分组
  273. 4.having:分组之后进行过滤
  274. 5.select:执行完毕之后,显示内容
  275. 6.order by:根据查询的内容进行排序输出
  276. 查询小结:**********
  277. from表名
  278. where 条件:
  279. 逻辑运算符:and or not
  280. 比较运算符:< > <= >= <> =
  281. 在...之间:between...and...
  282. in():任意的一个条件成立即可
  283. is null/is not null
  284. 模糊匹配:like% _
  285. group by 列:对列进行分组
  286. having条件:
  287. 逻辑运算符:and or not
  288. 比较运算符:< > <= >= <> =
  289. 在...之间:between...and...
  290. in(set)
  291. is null/is not null
  292. 模糊匹配:like%
  293. 聚合函数(sum,avg,max,min,count)
  294. order by desc(降序)/asc(升序,默认)
  295. 数据库备份:
  296. 23.备份数据
  297. 1.打开一个新的dos窗口
  298. 2.输入命令
  299. 语法:mysqldump -u 用户名 -p 数据库名 >磁盘SQL文件路径
  300. mysqldump -u root -p mydb3 > E:\mysql03.sql
  301. 注意:在备份数据的时候,数据库不会被删除。
  302. 可以手动删除数据库。同时在恢复数据的时候,不会自动的给我们创建数据库,仅仅只会恢复数据库
  303. 中表和表中的数据。
  304. 24.恢复数据
  305. 语法:mysql -u 用户名 -p 导入库名 < 硬盘的SQL文件绝对路径
  306. 1.创建一个数据库(准备把数据恢复进去)
  307. 2.打开一个新的dos窗口
  308. mysql -u user -p newsql < e\:mysql03.sql
  309. 数据库多表设计
  310. 多对多:(开发中最常用)(需要设计中间表)
  311. 常见例子:程序员和项目的关系,顾客和商品的关系等
  312. 一个程序员可以参与多个型项目,一个项目可以被多个程序员开发
  313. 说明***:如果两张表是多对多的关系,需要创建第三张表,并在
  314. 第三张表中增加两列(另外两张表的主键),引入其他两张表的主键作为自己的外键
  315. 例如:
  316. //创建程序员表
  317. create table coder(
  318. id int primary key auto_increment,
  319. name varchar(50),
  320. salary double
  321. );
  322. //创建项目表
  323. create table project(
  324. id int primary key auto_increment,
  325. name varchar(50)
  326. )
  327. //创建中间关系表
  328. create table coder_project(
  329. coder_id int,
  330. project_id int,
  331. foreign key(coder_id) references coder(id);//外键约束
  332. foreign key(project_id) references project(id);
  333. );
  334. 使用中间表的目的是维护两表多对多的关系:
  335. 1.中间表插入的数据 必须在多对多的主表中存在
  336. 2.如果主表的记录在中间表维护了关系,就不能随意删除。如果可以删除,
  337. 中间表就找不到对应的数据了,这样就没有意义了。
  338. 添加外键需注意:
  339. 1.如果从表要去添加一个外键约束,要求主表被引用的字段是主键或者唯一的。通常使用主键
  340. 2.如果要删除主表的数据。要求在从表中这个数据,要没有被引用,才可以删除。
  341. 3.如果要向从表中去添加数据。要求在主表中,要有对应的数据。才可以去添加。
  342. 外键约束作用:保持数据的完整性,和有效性。
  343. 一对多关系:
  344. 设计**:需要在多的一方增加一列,引入一的一方的主键作为自己的外键
  345. 例如:作者和小说关系,用户和订单的关系等。
  346. 一个作者可以写多部小说,但是每一部小说,只能对应具体的一个作者。
  347. 一对一关系
  348. 设计:可以在任意一方表中添加另一方的主键作为外键即可。
  349. 例如:一个老公对应一个老婆,一个老婆对应一个老公。
  350. 经典案例:设计学生成绩管理系统数据表(按照给定需求设计即可)
  351. 1.每个教师可以教多门课程 //
  352. 2.每个课程由一个老师负责 //一对多
  353. 3.每门课程由多个学生选修 》
  354. 4.每个学生可以选修多门课程 》多对多
  355. 5.学生选修课程要有成绩
  356. 学生表
  357. create table student(
  358. id int primary key auto_increment,
  359. name varchar(50)
  360. )
  361. 老师表
  362. create table teacher(
  363. id int primary key auto_increment,
  364. name varchar(50)
  365. )
  366. 课程表
  367. create table course(
  368. id int primary key auto_increment
  369. name varchar(50),
  370. teacher_id int,
  371. foreign key(teacher_id) references teacher(id)
  372. )
  373. 中间表
  374. create table course_student(
  375. student_id int,
  376. course_id int,
  377. score double,
  378. foreign key(student_id) references student(id);
  379. foreign key(course_id) references student(id);
  380. )
  381. 全复习:
  382. 库的操作
  383. 创建库:create database 库名 character set 编码表;
  384. 删除库:drop database 库名;
  385. 查询库:show databases;
  386. 查看库的编码表:show create database 库名;
  387. 更改库:use 库名;
  388. 查看当前正在使用的库:select database();
  389. 修改库的编码表:alter database 库名 character set 编码表;
  390. 表本身的操作
  391. 创建表:create table 表名( 列名 列的类型(长度) 列的约束 ,列名 列的类型(长度) 列的约束...... );
  392. 删除表:drop table 表名;
  393. 查询表:show tables;
  394. 查看表的结构:desc 表名;
  395. 查看表的编码表:show create table 表名;
  396. 修改表:alter table 表名 增//改 列名 列的类型(长度) 约束;
  397. add/drop/change/modify
  398. 修改表名:rename table 旧表名 to 新表名;
  399. 表中数据的操作
  400. 增:insert into 表名(列名) values(值);
  401. 删:delete from 表名 where 条件; truncate
  402. 改:update 表名 set 列名=值 ,列名=where 条件 ;
  403. 查:select 列名 as 别名 ,列名 as 别名。。。。 from 表名 where 条件;
  404. 查询排重:select distinct 列名 from 表名 where 条件;
  405. Mysql中limit的用法:返回前几条或者中间某几行数据
  406. select * from 表名limit 1,4
  407. 1表示索引,注意这里的索引从0开始。
  408. 4表示查询记录数。
  409. 上述就表示从第2条记录开始查询,一共查询4条,即到第5条。
  410. 聚合函数:
  411. count 统计个数、sum求和、avg 平均值、max、min
  412. 在使用这几个函数进行数据的统计分析时,有时需要对数据表中的列进行数据的分组处理。group by
  413. 分组 group by :
  414. 排序:order by asc | desc
  415. 多表查询:
  416. 笛卡尔积介绍(id*id 如两个表都是三行数据,查询出来就是3*3=9
  417. 25.查询两张表中关于水果的信息,要显示水果名称和水果价格?
  418. 多表查询语法:select * from a,b;
  419. 直接查询的获得结果:
  420. a表中的每一条记录,都和b表中的每一条进行匹配连接。所得到的最终结果是:a表中的条目数
  421. 乘以b表中的数据的条目数。
  422. 将a表的每行记录和b表的每行记录组合的记过就是笛卡尔积。
  423. 笛卡尔积缺点:查询到结果冗余了,里面有很多错误的数据,需要过滤。
  424. (解决笛卡尔积:多表查询一定要添加条件)
  425. 内连接:(两表的公共部分)
  426. 隐式内连接查询
  427. 语法:
  428. select 列名,列名...from 表名1,表名2 where 表名1.列名 = 表名2.列名;
  429. 如:select * from a,b where a.列名 = b.列名;
  430. 显示内连接查询
  431. 语法:
  432. select * from 表名1 inner jion 表名2 on 条件;
  433. 如:select * from a inner jion b on a.id = b.id;
  434. 外连接查询:
  435. 外链接:左外连接、右外连接、全外连接、自连接
  436. 左外连接:
  437. 用左边表去右边的查询对应记录,不管是否找到,都将显示左边表中全部记录
  438. 举例:上述案例中虽然右表没有香蕉对应的价格,也要把他查询出来。
  439. 语法:select * from1 left outer2 on 条件;
  440. 如:select * from a left outer join b on a.id = b.id;
  441. 说明:把left关键字之前的表,是定义为左侧。left关键字之后的表,定义右侧。
  442. 查询的内容,以左侧的表为主,如果左侧有数据,右侧没有对应的数据,仍然会把左侧数据进行显示。
  443. 右外连接:
  444. 用右边表去左边表查询对应记录,不管是否找到,右边表全部记录都将显示
  445. 举例:上述案例中不管在左方表能否找到右方价格对应的水果,都要把右方的价格显示出来。
  446. 语法:select * from1 right outer join2 on 条件;
  447. 如:select * from a right outer join b on a.id = b.id;
  448. 说明:如果右侧有数据,左侧没匹配到,把右侧的数据显示出来。
  449. right之前的是左侧,right之后的是右侧。
  450. 总结:
  451. 左外连接以关键字左侧数据为主,不管右侧的数据是否有对应,都把左侧的数据显示出来。
  452. 右边连接以关键字右侧数据为主,不管左侧的数据是否有对应,都把右侧的数据显示出来。
  453. 全外连接:
  454. 全外连接:左外连接和右外连接的结果合并
  455. select * from1 full outer jion 表2 on 条件;
  456. 举例:select * from a full outter jion b on a.id = b.id;(mysql数据库不支持此语法)
  457. (oracle 和 DB2及其他数据库是支持的)
  458. 引入union
  459. 和并左右外连接进行查询,去掉重复的数据。
  460. select * from a left outer join b on a.id = b.id
  461. union
  462. select * from a right outer jion b on a.id = b.id;
  463. 全外连接(不去调重复的数据)结果:使用union all
  464. 多表查询小结快速看:
  465. 内连接:
  466. 1、隐式内连接:
  467. Select * from a,b where a.id = b.id;
  468. 结果:C
  469. 2、显示内连接:
  470. Select * from a inner join b on a.id = b.id;
  471. 结果:C
  472. 外连接:
  473. 1、左外连接
  474. select * from a left outer join b on a.id = b.id
  475. 结果:A+C
  476. 2、右外连接
  477. select * from a right outer join b on a.id = b.id
  478. 结果:B+C
  479. 3union:相当于全外连接
  480. select * from a left outer join b on a.id = b.id
  481. union
  482. select * from a right outer join b on a.id = b.id
  483. 结果:A+B+C,会自动虑重
  484. select * from a left outer join b on a.id = b.id
  485. union all
  486. select * from a right outer join b on a.id = b.id
  487. 结果:A+B+C,有重复数据
  488. 关联子查询:
  489. 子查询定义:把一个sql的查询结果作为另一个查询的参数存在。
  490. 数据库有A水果表,B价格表
  491. A水果表 B价格表
  492. id name id price
  493. 1 苹果 1 2.3
  494. 2 橘子 2 3.5
  495. 3 香蕉 4 NULL
  496. 25.查询价格最贵的水果名称
  497. 步骤:1.在B表中找最高的价格:
  498. select max(price) from b;
  499. 2.在B表中找到最高价格对应的编号;
  500. select b.id from b where b.price = 3.5;
  501. 3.在A表中根据编号找对应的水果名称;
  502. select a.name from a where a.id in(2);
  503. 根据子查询完成上述的功能需求:
  504. select a.name from a
  505. where a.id in(select b.id from b
  506. where b.price = (select max(price) from b)); )
  507. in的用法:
  508. 26.查询不及格的学生(使用in完成)
  509. 1.在中间表中查询不及格的学生编号
  510. select student_id from student_course where score<60;
  511. 2.在学生表中根据学生编号查询学生信息
  512. select * from student where id in
  513. (select student_id
  514. from student_course
  515. where score<60);
  516. exists:(了解)
  517. 如果子查询有返回数据行,就认为是true,否则就认为是false
  518. 语法:select * from 表名 where exists(select ... from 表名 where 条件)
  519. 将外表中的查询结果拿到内表中去逐行判断条件是否成立,如果成立,取出该行结果。
  520. 说明:可以把exists原理理解为基础班学习过的嵌套循环,思想是一样的。
  521. 子查询定义:将某一条sql语句的执行结果作为另一条sql语句的查询条件。
  522. 28.查询不及格的学生
  523. select * from student
  524. where exists(select student_id
  525. from student_course
  526. where score<60 and student_course.student_id=student.id);
  527. 29.查询年龄最大的学生的信息
  528. select * from student where age =(select max(age) from student);
  529. select * from student where age >=all(select age from student);
  530. anysome的使用方法(基本上一样)
  531. any:表示任何一个
  532. a>any(1,2,3) 等价于 a>1 或者 a>2 或者 a>3 --->等价于 a>min(1,2,3)
  533. <any(1,2,3) 等价于 <1 or <2 or <3 等价于 <3 等价于 <max(1,2,3)
  534. 30.查询成绩是90的学生的信息
  535. select * from student where id = any/some(
  536. select student_id from studentcourse where
  537. score =90);
  538. 31.查询获得最高分的学生信息。
  539. 1).在中间表找最高分
  540. 2).在中间表中找最高分对应的学生编号
  541. 3).在学生表中根据学生编号找学生信息
  542. select * from student where id in (
  543. select student_id from studentcourse where
  544. score = (select max(score) from studentcourse)
  545. );
  546. 31.查询编号是2的课程比编号是1的课程最高成绩高的学生信息。
  547. 1).在中间表中 找编号是1的课程的最高成绩
  548. 2).在中间表中 找编号是2的成绩 > 编号 1最高成绩 的学生id;
  549. 3).在学生表中 根据学生的编号 找对应的学生信息
  550. select * from student where id in(
  551. select student_id from studentcourse
  552. where course_id = 2 and score>(select max(score) from studentcourse where course_id = 1)
  553. )
  554. 33.查询不及格的学生信息和不及格分数
  555. (1)不及格分数
  556. select * from studentcourse where score<60;
  557. (2)将查询的结果表作为临时表和student学生表进行多表关联查询
  558. select student.* ,temp.score from student,(select * from studentcourse where score<60) as temp
  559. where id = student_id;
  560. 分析:
  561. select * from a,b where 条件;
  562. select * from student,(结果表) as temp where id = student_id;
  563. 注意:如果要将查询的结果表作为多表关联查询,必须要将结果表当做临时表来使用。
  564. limit 限制查询结果返回的数量
  565. 格式1select * from 表名 limit 数量;
  566. 格式2select * from 表名 limit [偏移量],数量;(分页查询可以用到)(从偏移量之后开始返回数据)
  567. 34.查询数学成绩比语文成绩高的所有学生信息。
  568. 1.先拿数学的id
  569. select id from course where name ='数学';
  570. select id from course where name = '语文';
  571. 2.根据课程id从中间表中获取对应课程的所有信息
  572. select * from student_course
  573. where id = (select id from course where name ='数学');
  574. select * from student_course
  575. where id = (select id from course where name ='语文');
  576. 多表关联语句:select* from a,b where 条件;
  577. select * from () as temp1,() as temp2
  578. where temp1.student_id = temp2.student_id
  579. and temp1.score> temp2.score;
  580. 查询结果语句:(注意相同的字段要指定表名,否则就报错)
  581. select temp1.student_id from (select * from student_course
  582. where id = (select id from course where name ='数学')) as temp1,(select * from student_course
  583. where id = (select id from course where name ='语文')) as temp2
  584. where temp1.student_id = temp2.student_id
  585. and temp1.score> temp2.score;
  586. 将以上的查询结果(1,5,6)作为student表的条件查询对应的学生信息
  587. select * from student where id in(select temp1.student_id from (select * from student_course
  588. where id = (select id from course where name ='数学')) as temp1,(select * from student_course
  589. where id = (select id from course where name ='语文')) as temp2
  590. where temp1.student_id = temp2.student_id
  591. and temp1.score> temp2.score);
  592. 自带函数:(了解)
  593. select password('abc');加密
  594. ---String ->substring
  595. select substring('王思聪',2,2); 参数1:源 参数2:偏移量 参数3:长度
  596. --Math ->abs,ceiling,floor,round
  597. select abs(-88);
  598. select ceiling(8.1);
  599. select floor(8.9);
  600. select round(8.5);
  601. --时间/日期 ->Date,SimpleDateFormat,Calendar
  602. select now();
  603. select current_time();
  604. select current_date();
  605. select year(now());

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/938595
推荐阅读
相关标签
  

闽ICP备14008679号