一些记录查询的SQL语句

-- ======================== 第三天 ===========================
CREATE DATABASE php0408 CHARSET utf8
;CREATE TABLE php0408.student (
	sid INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
	sname VARCHAR(18) NOT NULL,
	sex ENUM(‘male‘,‘female‘) NOT NULL DEFAULT ‘female‘,
	cid INT UNSIGNED NOT NULL
) ENGINE=MYISAM

;CREATE TABLE php0408.class (
    id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
    cname VARCHAR(10) NOT NULL
) ENGINE=MYISAM

;USE php0408
;SHOW TABLES

;INSERT INTO php0408.`class` VALUES(NULL,‘php0306‘),(NULL,‘php0420‘),(NULL,‘php1101‘)
;SELECT * FROM php0408.`class`
;INSERT INTO student VALUES(NULL,‘小花‘,1,8)
;SELECT * FROM student

;DROP TABLE student
;DROP TABLE class
;CREATE TABLE php0408.student (
	sid INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
	sname VARCHAR(18) NOT NULL,
	sex ENUM(‘male‘,‘female‘) NOT NULL DEFAULT ‘female‘,
	cid INT UNSIGNED NOT NULL,
	CONSTRAINT FOREIGN KEY (cid) REFERENCES class(id) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=INNODB
;CREATE TABLE php0408.class (
    id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
    cname VARCHAR(10) NOT NULL
) ENGINE=INNODB
;SHOW CREATE TABLE student
#创建外键
;ALTER TABLE student ADD CONSTRAINT `student_cid_class_id` FOREIGN KEY (cid) REFERENCES class(id)
#删除外键,要使用外键的名字
;ALTER TABLE student DROP FOREIGN KEY `student_cid_class_id`

;SELECT * FROM student
;UPDATE student SET cid=1 WHERE sid=1
;SELECT * FROM class
# 附表创建记录时,必须保证外键字段数据在主表中存在
;INSERT INTO student VALUES(NULL,‘小芳‘,2,8)
# 删除主表主键的时候,会检查外键约束,如果别的表依赖该记录,则不能删除
;DELETE FROM class WHERE id=1

#可以设置主表记录发生变化的时候,关联表做什么操作:比如修改主表记录,关联表相应修改,删除主表记录,关联表置空
;ALTER TABLE student ADD CONSTRAINT `student_cid_class_id` FOREIGN KEY (cid) REFERENCES class(id) ON DELETE SET NULL ON UPDATE CASCADE
;UPDATE class SET id=0 WHERE id=1
;DELETE FROM class WHERE id=0

;CREATE TABLE nf1(
	NAME CHAR(18),
	sex CHAR(1),
	class CHAR(10),
	room CHAR(10),
	days INT,
	dksj CHAR(20)
)
;DESC nf1
;ALTER TABLE nf1 CHANGE COLUMN dksj `start` DATETIME
;ALTER TABLE nf1 ADD COLUMN `end` DATETIME

;INSERT INTO nf1 VALUES(‘四哥‘,‘男‘,‘php0408‘,‘603‘,20,‘2015-04-08‘,‘2015-05-08‘)
;SELECT * FROM nf1
;CREATE TABLE nf2(
	NAME CHAR(18),
	sex CHAR(1),
	class CHAR(10),
	room CHAR(10),
	days INT,
	START DATETIME,
	END DATETIME,
	PRIMARY KEY (NAME,class)
)
#补充timestamp知识
;CREATE TABLE php0408.tm(
	c1 TIMESTAMP DEFAULT ‘2015-05-06 10:00:00‘,
	c2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)

;INSERT INTO php0408.`tm` (c2) VALUES (NULL)
;SELECT * FROM tm
;UPDATE tm SET c3 =1 WHERE c3 IS NULL
# 插入时出现主键约束
;INSERT INTO student VALUES(1,‘小花‘,2,2)
;SELECT * FROM student
#当插入的数据出现主键冲突时,设定该记录的数据
;INSERT INTO student VALUES(1,‘小花‘,2,2) ON DUPLICATE KEY UPDATE sname=‘小王‘
;CREATE TABLE stu (
	sname VARCHAR(18),
	cid INT UNSIGNED
)
;SELECT * FROM stu
#将其它表中的数据插入到当前表
;INSERT INTO stu SELECT sname,cid FROM student WHERE sid<2

;SELECT 1
;SELECT NOW()
;SELECT CURRENT_TIMESTAMP
#给要展示的字段加一个别名
;SELECT sname AS `姓名` FROM php0408.student
#as也可以省略
;SELECT sname `姓名` FROM php0408.student
;SELECT 1+1 AS rst
;SELECT RAND()

;SELECT * FROM student
;SELECT * FROM class
;SELECT * FROM student,class,tm

#由于两张表中都有sname和cid字段,所以
#为了确定sname来源于student表cid来源于stu表,需要使用表名.字段名的形式
;SELECT student.sname,stu.`cid` FROM student,stu

#给表起别名
;SELECT t1.sex,t1.sname,t2.`cid` FROM student AS t1,stu AS t2

#要求从两张表中取出各自的sname,为了在php中避免键名一样,数组元素覆盖,要给字段起别名
;SELECT t1.sname AS sname1,t2.sname AS sname2 FROM student AS t1,stu AS t2

#有时候为了使sql语句看起来完整,会使用表作为数据来源,但是有些数据无需表的参与,就是用dual虚拟表
;SELECT 1,NOW() FROM DUAL

#where 从 from 所指定的数据来源中,对每条记录进行一次判断,利用条件表达式!
;SELECT * FROM student WHERE FALSE

;SELECT * FROM class WHERE id <>2
#带有php的
;SELECT * FROM class WHERE cname LIKE ‘%php%‘
#带有11的
;SELECT * FROM class WHERE cname LIKE ‘%11%‘
#查询所有以java开头的
;SELECT * FROM class WHERE cname LIKE ‘java%‘

#列出id是1 或 2 或 3的记录
;SELECT * FROM class WHERE id IN (1,2,3)
#列出id不是1 2 3的记录
;SELECT * FROM class WHERE id NOT IN (1,2,3)

#列出id在2和3之间的,闭合区间
;SELECT * FROM class WHERE id BETWEEN 2 AND 3

# 列出时间在2015/04/30 10:00:00到2015-5-8 0:0:0之间的记录
;SELECT * FROM tm WHERE c1 BETWEEN ‘2015/04/30 10:00:00‘ AND ‘2015-5-8‘

;SELECT NULL-0,NULL+0,NULL,NULL*0,NULL+1,NULL=1,NULL=NULL

;CREATE TABLE php0408.nul(
	c1 INT NULL,
	c2 CHAR(8) NULL
)
;INSERT INTO php0408.`nul` VALUES(1,NULL),(2,‘2‘),(3,3)

#由于null和任何数据进行运算都是null,转换为布尔值结果是false
#所以为了列出字段为null的记录,必须使用is null
;SELECT * FROM nul WHERE c2 IS NULL

#以下两条是相同的
;SELECT * FROM nul WHERE c2 IS NOT NULL
;SELECT * FROM nul WHERE NOT c2 IS NULL

#取出所有的c1为1并且c2为2的记录
;SELECT * FROM nul WHERE c1=1 AND c2=2

#取出所有的c1为1或者c2为2的记录
;SELECT * FROM nul WHERE c1=1 OR c2=2

#运算符优先级,可以使用()提升优先级
;SELECT * FROM nul WHERE c1=1 AND (c2=2 OR c1=3)

#使用group by进行分组
;SELECT *,COUNT(*) FROM stu GROUP BY cid
#如果count里面是一个具体的字段,将会过滤该字段为null的记录
;SELECT *,COUNT(c2) FROM nul GROUP BY c1

#将每一个组里面的cid字段求和展示出来
;SELECT *,COUNT(cid),SUM(cid) FROM stu GROUP BY cid

#取出某个字段最大值
;SELECT *,MAX(sid) FROM student GROUP BY cid
#取出某个字段最小值
;SELECT *,MIN(sid) FROM student

;SELECT *,MAX(sid) FROM student
;SELECT *,AVG(sid) FROM student GROUP BY cid
#将分组后每个记录的姓名 学号展示出来
;SELECT *,GROUP_CONCAT(sname,‘-‘,sid) FROM student GROUP BY cid

#可以在分组后使用排序,asc和desc(降序)
;SELECT cid,COUNT(*) FROM student GROUP BY cid DESC

#根据两个字段进行分组,并且对结果集先按照cid降序排,接着如果cid相同,按照性别升序排
;SELECT cid,COUNT(*),sex FROM student GROUP BY cid DESC,sex ASC

;SELECT cid,COUNT(*) FROM student GROUP BY cid WITH ROLLUP

;SELECT cid,COUNT(*),sex FROM student GROUP BY cid DESC,sex ASC WITH ROLLUP

#求出班级人数超过2个的班级
;SELECT cid,COUNT(*) AS num FROM student GROUP BY cid HAVING num>2

#排序,先按照班级号升序,再按照学号降序
;SELECT * FROM student ORDER BY cid ASC,sid DESC
#随机排
;SELECT *  FROM student ORDER BY RAND()

#limit用于从结果集中取得几条数据,limit受前面子句的影响
;SELECT * FROM student WHERE sid<4 LIMIT 5,2

  

时间: 2024-10-29 00:35:02

一些记录查询的SQL语句的相关文章

mysql按年度、季度、月度、周、日统计查询的sql语句

本文介绍一些mysql中用于查询的sql语句,包括按年度.季度.月度.周.日统计查询等,有需要的朋友,可以参考下. 一.年度查询 查询 本年度的数据 SELECT * FROM blog_article WHERE year( FROM_UNIXTIME( BlogCreateTime ) ) = year( curdate( )) 二.查询季度数据 查询数据附带季度数 SELECT ArticleId, quarter( FROM_UNIXTIME( `BlogCreateTime` ) )

MySQL5.6 如何优化慢查询的SQL语句 -- 慢日志介绍

最近有个开发团队抱怨我们平台包含的mysql cluster不行,总是报mysql的"heartbeat Error",分析了他们收集的日志,没有发现mysql cluster节点之间的网络有问题,倒是发现了一个很有意思的现象,在mysql的slow log里面发现了大量的慢查询,基本上都是要1秒钟以上,很明显这种耗时高的慢查询会影响系统行为,指出这点让开发团队去优化他们的应用,很好奇他们竟然不知道有这些东西可以分析...... 数据库响应慢问题最多的就是查询了.现在大部分数据库都提供

MySQL5.6 怎样优化慢查询的SQL语句 -- 慢日志介绍

近期有个开发团队抱怨我们平台包括的mysql cluster不行,总是报mysql的"heartbeat Error".分析了他们收集的日志.没有发现mysql cluster节点之间的网络有问题,倒是发现了一个非常有意思的现象,在mysql的slow log里面发现了大量的慢查询.基本上都是要1秒钟以上,非常明显这样的耗时高的慢查询会影响系统行为.指出这点让开发团队去优化他们的应用,非常好奇他们居然不知道有这些东西能够分析. ... .. 数据库响应慢问题最多的就是查询了.如今大部分

MySQL5.6 如何优化慢查询的SQL语句 -- SQL优化

上篇:MySQL5.6 如何优化慢查询的SQL语句 -- 慢日志介绍 在实际的日志分析中,通常慢日志的log数量不少,同时相同的查询被记录的条数也会很多,这里就需要如何从慢日志查询中找到最有问题,最需要优化的日志.在这方面,有很多分析工具,最基本的分析工具就是MySQL自带的mysqldumpslow,mysqldumpslow(Perl脚本)的输出示例: [[email protected] bin]# ./mysqldumpslow -s t -t 1 /usr/local/mysql/da

MySql实现分页查询的SQL,mysql实现分页查询的sql语句 (转)

http://blog.csdn.net/sxdtzhaoxinguo/article/details/51481430 摘要:MySQL数据库实现分页查询的SQL语句写法! 一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的需求不一样,所以就需要我们根据实际情况去改写适合我们自己的分页语句,具体的分析如下: 比如: 查询第1条到第10条的数据的s

结合真实的测试实例,记录一次SQL语句辅助功能测试的场景(包含多表联查及子查询)

本文结合实例讲解一下 SQL 语句通过数据库辅助进行功能测试.希望阅读本文的小伙伴,能通过这个场景实例体会到SQL 语句在真实的功能测试时起到的作用 本次功能测试涉及的sql 知识点如下: 1 SELECT 查询 2 where 子句 3 count() 4 to_char() 5 group by 6 order by 7 两表联查(这里涉及left join) 8 子查询嵌套 实例中的需求文档 : 系统的测试界面:(不好意思,写文章的时候,想去截一个好一点的图片,测试环境无法登录了) 前提解

T-SQL - 记录01_基础sql语句操作

时间:2017-12-25 整理:byzqy 最近详细学习了一下MS SQL Server相关的知识,收获不小,在此记录一下,可能有点零散,后续会慢慢整理! 1.对数据库的一些认识 数据库中只认命令(脚本),所有的可视化操作实质上都是执行的SQL命令. 2.简单复习 1.数据库(要是使用数据库,首先需要打开服务),表(即数据表) 安装了几个数据库实例,就有几个数据库服务(服务器名称,貌似就是数据库实例名称) 2.创建数据库,创建表 3.数据类型 --带var表示不固定长度,不带var表示固定长度

【sql server inject】使用动态查询执行sql语句实例

应某少年要求授权测试一个存在报错注入点的站点,可读取数据库名,但是sqlmap执行–os-shell选项就会莫名当掉: 分步骤测试了几次,发现xp_cmdshell是开启状态,但用sqlmap注入却无法利用XP_cmdshell执行命令? 正好最近在读[SQL注入攻击与防御],感觉这真是一个值得实践的好目标! 为了简化测试步骤,所以文章分为5次进行记录: 0x1 sqlmap常用语句测试 测试1目的:执行cmd命令 测试1结果,测试初期无法连接: ------------------------

Oracle数据库查询分页SQL语句

Oracle数据库查询分页数据SQL语句: select * from (select a.*,rownum row_num from (select * from mytable t order by t.id desc) a ) b where b.row_num between 1 and 10