MySQL语句和selete语句

DQL语句:

创建语句:CREATE TABLE      表名

查询语句:SHOW 表名

修改语句:ALTER TABLE<旧表名>RENAME[TO]<新表名>

          ALTER TABLE 表名 CHANGE 原字段名  新字段名 数据类型[属性]

添加语句:ALTER TABLE表名ADD字段名 数据类型 约束

删除语句:DROP TABLE [IF  EXISTS] 表名

ALTER TABLE 表名  DROP  字段名


DML语句:

插入语句 INSERT INTO 表名[字段名] VALUES (值列表    ) 

更新语句 UPDATE 表名 SET  列名=更新值[WHERE 更新条件]

删除语句 DELETE [FROM] 表名[WHERE <删除条件>]


DQL语句:

SELECT `no`,`name`,`num` FROM mx;

#取别名
SELECT `no` AS 号码,`name` AS 姓名,`num` AS 分数 FROM mx;
UPDATE mx SET `name`='杨幂' WHERE `no`=6;


#为查询的结果取别名
SELECT CONCAT('姓名:',`name`) AS 姓名 FROM mx;


#DISTINCT是去掉查询的重复项


#select查询中可以使用表达式
#查询自增的步长
SELECT @@auto_increment_increment
#查询MySQL的版本号 
SELECT VERSION();
#计算数据
SELECT 100*3-1 AS 计算结果;


#成绩集体提高一分
SELECT `no`,`num`+1 AS 提分后 FROM mx;


#满足条件的查询(where)
SELECT `no`,`num`
FROM mx
WHERE num>=95 AND num<=100;




#精确查询
SELECT `no`,`num`
FROM mx
WHERE `no`=1;


#比较运算符
#除了1号同学
SELECT `no`,`num`
FROM mx
WHERE `no`!=1;
#第二种方法
SELECT `no`,`num`
FROM mx
WHERE NOT `no`=1;


#模糊查询 between and /like /in /null
#查询某个姓的姓名
#like结合使用的:%(0到任意个字符) _(一个字符)
#查询姓刘的
SELECT `no`,`name` 
FROM mx
WHERE `name` LIKE '宋%';


#查询带“亦”的
SELECT `no`,`name` 
FROM mx
WHERE `name` LIKE '%儿%';


#模糊查询
SELECT `no`,`num`
FROM mx
WHERE num BETWEEN 95 AND 100;


INSERT INTO`mx`
(`no`,`name`,`num`) VALUES(7,'胖迪%',89.0);


#查询带%的姓名  需要用转移符
SELECT `no`,`name` FROM mx
WHERE `name` LIKE '%\%%';


#转移符  自定义转移符
SELECT `no`,`name` FROM mx
WHERE `name` LIKE '%/%%' ESCAPE '/';


#模糊查询 in   null
SELECT `no`,`name` FROM mx
WHERE `no`=2 OR `no`=4 OR `no`=6;


SELECT `no`,`name` FROM mx
WHERE `no`  IN(3,5,7);


SELECT `no`,`name` FROM mx
WHERE address IN('乌鲁木齐','武汉');


#null  空
#查询某一项没有填写为空时,不能写=null  要写is null
#查询某一项填写时,写 is not  null
#区别空字符串与null  当某一项没有写时为null  查询用is null
#当某一项填写后删除为空字符串是  要=' '




#连接查询
#内连接  inner join   查询两个表中的结果集中的交集
#外连接  outer join
#1.左外连接  left join   以左表为基准,右边表来一一匹配,匹配不上的,返回左表的记录,右表以null填充
#  2.右外连接  right join   以右表为基准,左边表来一一匹配,匹配不上的,返回右表的记录,左表以null填充
#自连接
#等值连接  非等值连接
#查询参加了考试的同学信息(学号、学生姓名、科目编号、分数)
SELECT * FROM student;
SELECT * FROM result;
#思路:(1)分析需求,确定查询的列来源于哪里,连接查询
#(2)确定使用哪一种连接查询? ---内连接
SELECT s.studentNo,studentName,subjectno,studentresult
FROM student AS s
INNER JOIN result AS r
ON r.`StudentNo`=s.`StudentNo`






#左外连接  student为左表   result为右表
SELECT s.studentNo,studentName,subjectno,studentresult
FROM student AS s
LEFT JOIN result AS r
ON r.`StudentNo`=s.`StudentNo`




#右外连接
SELECT s.studentNo,studentName,subjectno,studentresult
FROM student AS s
RIGHT JOIN result AS r
ON r.`StudentNo`=s.`StudentNo`


#等值连接
SELECT s.studentNo,studentName,subjectno,studentresult
FROM student AS s,result AS r
WHERE r.`StudentNo`=s.`StudentNo`


#非等值连接  左边表里m行  右边表里n行  返回总共m*n行
SELECT s.studentNo,studentName,subjectno,studentresult
FROM student AS s,result AS r


#查询参加过考试的同学信息(学号、姓名、科目名称、成绩)按降序排列
SELECT s.studentNo,studentName,subjectname,studentresult
FROM student AS s
INNER JOIN result AS r
ON r.`StudentNo`=s.`StudentNo`
INNER JOIN `subject` AS sub
ON r.`SubjectNo`=sub.`subjectno`
WHERE subjectname='语文'  AND StudentResult>=80 n
ORDER BY studentresult DESC,studentno DESC;      #默认 asc 升序


#每页显示5条记录
#(当前页码-1)*页容量   页容量
SELECT s.studentNo,studentName,subjectname,studentresult
FROM student AS s
INNER JOIN result AS r
ON r.`StudentNo`=s.`StudentNo`
INNER JOIN `subject` AS sub
ON r.`SubjectNo`=sub.`subjectno`
WHERE subjectname='语文'
ORDER BY studentresult   DESC
LIMIT 0,5    #从哪条记录开始(起始行,从0开始)  要显示几条




#子查询
#查询考试结果(学号、科目编号、成绩),并按成绩降序排列
#方法一:使用连接查询
SELECT studentno,r.`StudentNo`,studentresult
FROM result AS r 
INNER JOIN `subject` AS sub
ON r.`StudentNo` = sub.`SubjectNo`
WHERE subjectname='数学'
ORDER BY StudentResult DESC;
#方法二:使用子查询   子查询执行顺序:由里到外
SELECT studentno,subjectno,studentresult
FROM result WHERE subjectno=(SELECT subjectno FROM `subject`WHERE subjectname='数学')
ORDER BY StudentResult DESC;


#查询某课程并且分数不小于80分(学号和姓名)
SELECT r.studentno,studentname
FROM student AS s
INNER JOIN result AS r
ON s.`StudentNo`=r.`StudentNo`
WHERE StudentResult>=80
AND subjectno=(SELECT subjectno FROM `sbject` WHERE subjectname='数学')


#方法二:
#分布写简单SQL语句,然后将其嵌套起来
SELECT studentno,studentname FROM student WHERE studentno IN(
SELECT studentno FROM result WHERE studentresult>=80 AND subjectno=(
SELECT subjectno FROM `subject` WHERE subjectname='数学'))





 #自连接
 CREATE TABLE IF NOT EXISTS category(
`categoryid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`Did`INT(10) NOT NULL COMMENT '父id',
`categoryName` VARCHAR(50) NOT NULL,
PRIMARY KEY(`categoryid`)
 );
 
 INSERT INTO `category`
 VALUES('2','1','美术设计'),
 ('3','1','软件开发'),
 ('4','3','数据库基础'),
 ('5','2','ps基础'),
 ('6','2','色彩搭配'),
 ('7','3','PHP基础'),
 ('8','3','Java基础');
 
 SELECT categoryid AS 子栏目,Did AS 父栏目,categoryName AS 名字 FROM category;
 
 #编写SQL语句,将栏目的父子关系呈现出来(父栏目名称,子栏目名称)
 #把category表看做两张一模一样的表,然后将这两张表连接查询
 SELECT a.categoryName AS '父栏目',b.categoryName AS '子栏目'
 FROM category AS a,category AS b
 WHERE a.`categoryid`=b.`Did`;
 
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页