MySQL数据库 sql语句及其含义

本文主要记录常用sql语句及对应意义,有一定基础可直接查看使用,需要学习者,可转向另一篇博文

链接为:https://blog.csdn.net/guanmao4322/article/details/83348769

 1、查询语句 

SELECT id,stuName,age,sex,gradeName FROM t_student ;            查询表中全部数据(返回全部字段)
SELECT stuName,id,age,sex,gradeName FROM t_student ;            查询表中指定数据(返回指定字段)
SELECT * FROM t_student;            查询表中全部数据(同一)
SELECT stuName,gradeName FROM t_student;            查询表中指定数据(返回指定字段)
SELECT * FROM t_student WHERE id=1;            查询表中id=1的数据(返回id=1的全部字段)
SELECT * FROM t_student WHERE age>22;            查询表中年龄大于22岁的数据(返回全部字段)
SELECT * FROM t_student WHERE age IN (21,23);            查询表中年龄为21或23的数据(返回全部字段)
SELECT * FROM t_student WHERE age NOT IN (21,23);            查询表中年龄不是21或23的数据(返回全部字段)
SELECT * FROM t_student WHERE age BETWEEN 21 AND 24;            查询年龄在21-24之间的数据(返回全部字段)
SELECT * FROM t_student WHERE age NOT BETWEEN 21 AND 24;            查询年龄不在21-24之间的数据(返回全部字段)
SELECT * FROM t_student WHERE stuName LIKE '张三';               查询名字与张三相同的数据(返回全部字段)
SELECT * FROM t_student WHERE stuName LIKE '张三%';            查询名字中以张三开头的数据(返回全部字段)(见上图)
SELECT * FROM t_student WHERE stuName LIKE '张三__';            查询名字中含有张三但是是三个字的名字的数据(返回全部字段)
SELECT * FROM t_student WHERE stuName LIKE '%张三%';            查询名字中含有张三的全部数据(返回全部字段)
SELECT * FROM t_student WHERE sex IS NULL;            查询性别为空的数据(返回全部字段)
SELECT * FROM t_student WHERE sex IS NOT NULL;            查询性别不为空的数据(返回全部字段)
SELECT * FROM t_student WHERE gradeName='一年级' AND age=23            查询年级为‘一年级’并且年龄为‘23’的数据(返回全部字段)
SELECT * FROM t_student WHERE gradeName='一年级' OR age=23            查询年级为‘一年级’或年龄为‘23’的学生数据(返回全部字段)
SELECT DISTINCT gradeName FROM t_student;            查询该表中所有的年级并去掉重复部分(返回年级)
SELECT * FROM t_student ORDER BY age ASC;            查询该表中全部数据,并以年龄进行升序排序(返回全部字段)ASC表示升序排列
SELECT * FROM t_student ORDER BY age DESC;            查询该表中全部数据,并以年龄进行升序排序(返回全部字段)ASC表示升序排列
SELECT * FROM t_student GROUP BY gradeName;            查询根据年级来分组的结果(返回全部字段)无现实意义(见上图)
SELECT gradeName,GROUP_CONCAT(stuName) FROM t_student GROUP BY gradeName;            查询该表中根据年级分组的结果,返回年级和该年级中所有的学生姓名(见上图)
SELECT gradeName,COUNT(stuName) FROM t_student GROUP BY gradeName;            查询该表中根据年级分组的结果,返回年级和该年级中所有的学生数量(见上图)
SELECT gradeName,COUNT(stuName) FROM t_student GROUP BY gradeName HAVING COUNT(stuName)>3;            查询该表中根据年级分组并且该年级人数要大于3的结果,返回年级和该年级中所有的学生数量(见上图)
SELECT gradeName,COUNT(stuName) FROM t_student GROUP BY gradeName WITH ROLLUP;            查询该表中根据年级分组的结果,返回年级和该年级中所有的学生数量及学生总人数(见上图)
SELECT gradeName,GROUP_CONCAT(stuName) FROM t_student GROUP BY gradeName WITH ROLLUP;            查询该表中根据年级分组的结果,返回年级和该年级中所有的学生姓名及全部学生的姓名(见上图)
SELECT * FROM t_student LIMIT 0,5;            在该表中查询从0开始,取5组数据(返回全部字段)
SELECT * FROM t_student LIMIT 5,5;            在该表中查询从5开始,取5组数据(返回全部字段)
SELECT * FROM t_student LIMIT 10,5;            在该表中查询从10开始,取5组数据(返回全部字段)
select name,math,english,math+IFNULL(english,0) from student;  若english为null,则将其替换为0.
SELECT DISTINCT gradeName FROM t_student;            查询该表中所有的年级并去掉重复部分(返回年级)

2、聚合函数查询

SELECT COUNT(*) FROM t_grade;            查询该表中数据的条数
SELECT COUNT(*) AS total FROM t_grade;            查询该表中数据的条数并命名为total
SELECT stuName,COUNT(*) FROM t_grade GROUP BY stuName;            根据stuName分组, 并返回学生姓名和该姓名对应的数量     
SELECT stuName,SUM(score) FROM t_grade WHERE stuName="张三";            查询张三的分数总和
SELECT stuName,SUM(score) FROM t_grade GROUP BY stuName;            根据学生的姓名分组,返回每个姓名对应的分数总和
SELECT stuName,AVG(score) FROM t_grade WHERE stuName="张三";            查询张三的分数的平均值
SELECT stuName,AVG(score) FROM t_grade GROUP BY stuName;            根据学生姓名进行分组,返回每个姓名对应的分数的均值
SELECT stuName,course,MAX(score) FROM t_grade WHERE stuName="张三";           查询张三的分数的最大值,返回姓名,课程,课程分数        
SELECT stuName,MAX(score) FROM t_grade GROUP BY stuName;            根据学生姓名进行分组,返回每个姓名对应的最高分
SELECT stuName,course,MIN(score) FROM t_grade WHERE stuName="张三";             查询张三的分数的最小值,返回姓名,课程,课程分数         
SELECT stuName,MIN(score) FROM t_grade GROUP BY stuName;            根据学生姓名进行分组,返回每个姓名对应的最低分

3、连接查询

SELECT * FROM t_book,t_bookType;            笛卡尔乘积
SELECT * FROM t_book,t_bookType WHERE t_book.bookTypeId=t_bookType.id;            内连接查询,查询条件为t_book表中bookTypeId与表t_bookType中的id相等
SELECT bookName,author,bookTypeName FROM t_book,t_bookType WHERE t_book.bookTypeId=t_bookType.id;           内连接查询,查询条件为t_book表中bookTypeId与表t_bookType中的id相等 

SELECT tb.bookName,tb.author,tby.bookTypeName FROM t_book tb,t_bookType tby WHERE tb.bookTypeId=tby.id;    内连接查询,查询条件为t_book表中bookTypeId与表t_bookType中的id相等 (使用别名)

SELECT * FROM t_book LEFT JOIN t_bookType ON t_book.bookTypeId=t_bookType.id;            左连接查询
SELECT tb.bookName,tb.author,tby.bookTypeName FROM t_book tb LEFT JOIN t_bookType tby ON tb.bookTypeId=tby.id;            左连接查询(使用别名)
SELECT * FROM t_book RIGHT JOIN t_bookType ON t_book.bookTypeId=t_bookType.id;            右连接查询
SELECT tb.bookName,tb.author,tby.bookTypeName FROM t_book tb RIGHT JOIN t_bookType tby ON tb.bookTypeId=tby.id;        右连接查询(使用别名)
SELECT tb.bookName,tb.author,tby.bookTypeName FROM t_book tb,t_bookType tby WHERE tb.bookTypeId=tby.id AND tb.price>70;            多表联查

4、子查询

SELECT * FROM t_book WHERE booktypeId IN (SELECT id FROM t_booktype);(1先在t_booktype表中查询所有id)之后在t_book表中查询booktypeID与id相等的数据
SELECT * FROM t_book WHERE booktypeId NOT IN (SELECT id FROM t_booktype);

SELECT * FROM t_book WHERE price>=(SELECT price FROM t_pricelevel WHERE priceLevel=1);(先内查询,在t_pricelevel表中查询priceLevel=1数据条中的price)之后外查询,在t_book表中查询price>=内查询对的price的数据

SELECT * FROM t_book WHERE EXISTS (SELECT * FROM t_booktype);(先内查询,若表t_booktype中有数据则返回TRUE,执行外查询,否则结束)之后进行外查询
SELECT * FROM t_book WHERE NOT EXISTS (SELECT * FROM t_booktype);

SELECT * FROM t_book WHERE price>= ANY (SELECT price FROM t_pricelevel);(先内查询,在t_pricelevel表中查询所有的price)之后外查询,要求price大于任意一个内查询的price
SELECT * FROM t_book WHERE price>= ALL (SELECT price FROM t_pricelevel);(先内查询,在t_pricelevel表中查询所有的price)之后外查询,要求price大于所有的内查询price

5、合并查询

SELECT id FROM t_book;            准备材料
SELECT id FROM t_booktype;            准备材料
SELECT id FROM t_book UNION SELECT id FROM t_booktype;       将两个表中的id合并 (去除相同数据)
SELECT id FROM t_book UNION ALL SELECT id FROM t_booktype;            将两张表中的id合并(保留相同数据)


SELECT * FROM t_book WHERE id=1;        查询id=1的全部数据
SELECT * FROM t_book t WHERE t.id=1;            使用表别名的方式查询id=1的全部数据
SELECT t.bookName FROM t_book t WHERE t.id=1;        使用表别名的方式查询表t_book中id=1的数据条中bookName的数据
SELECT t.bookName bName FROM t_book t WHERE t.id=1;            使用字段别名
SELECT t.bookName AS bName FROM t_book t WHERE t.id=1;            使用字段别名

6、增删改查

    (1)增

INSERT INTO t_book VALUES(NULL,'我爱我家',20,'张三',1);         按照字段名称插入数据          
INSERT INTO t_book(id,bookName,price,author,bookTypeId) VALUES(NULL,'我爱我家',20,'张三',1);            按照字段名称插入数据,与上一条效果相同
INSERT INTO t_book(bookName,author) VALUES('我爱我家','张三');            向指定字段插入数据
INSERT INTO t_book(id,bookName,price,author,bookTypeId) VALUES (NULL,'我爱我家2',20,'张三',1),(NULL,'我爱我家3',20,'张三',1);            向表中插入多条数据

    (2)删

DELETE FROM t_book WHERE id=5;

DELETE FROM t_book WHERE bookName='我';

TRUNCATE TABLE 表名;//删除表,在创建一张一模一样的表,相当于删除全部数据

    (3)改

UPDATE t_book SET bookName='Java编程思想',price=120 WHERE id=1;            更新表t_book中,id=1中bookName与price的数据

UPDATE t_book SET bookName='我' WHERE bookName LIKE '%我爱我家%';         更新表t_book中,bookName为‘我爱我家’的书籍名称为‘我’   

   7、索引

CREATE TABLE t_user1(id INT ,
                     userName VARCHAR(20),
                     PASSWORD VARCHAR(20),
                     INDEX (userName)  在创建表的时候创建索引
                 );
                 
CREATE TABLE t_user2(id INT ,
                     userName VARCHAR(20),
                     PASSWORD VARCHAR(20),
                     UNIQUE INDEX index_userName(userName)
                 );
               
CREATE TABLE t_user3(id INT ,
                     userName VARCHAR(20),
                     PASSWORD VARCHAR(20),
                     INDEX index_userName_password(userName,PASSWORD)
                 );
                 
CREATE  INDEX index_userName ON t_user4(userName);
CREATE  UNIQUE INDEX index_userName ON t_user4(userName);
CREATE  INDEX index_userName_password ON t_user4(userName,PASSWORD);
ALTER TABLE t_user5 ADD INDEX index_userName(userName);
ALTER TABLE t_user5 ADD UNIQUE INDEX index_userName(userName);
ALTER TABLE t_user5 ADD INDEX index_userName_password(userName,PASSWORD);
DROP INDEX index_userName ON t_user5;
DROP INDEX index_userName_password ON t_user5;

8、视图 

CREATE VIEW v1 AS SELECT * FROM t_book;             创建视图:选择表t_book中的全部信息,从而创建视图v1;(单表)
CREATE VIEW v2 AS SELECT bookName,price FROM t_book;            选择表t_book中的bookName,price的信息,创建视图v2
CREATE VIEW v3(b,p) AS SELECT bookName,price FROM t_book;            选择表t_book中的bookName,price的信息,创建视图v3,并将这两个字段命名为b,p
SELECT * FROM v1;            查看视图v1
SELECT * FROM v2;            查看视图v2
SELECT * FROM v3;            查看视图v3
CREATE VIEW v4 AS SELECT bookName,bookTypeName FROM t_book,t_booktype WHERE t_book.bookTypeId=t_booktype.id;           多表创建视图:选择表t_book,t_booktype,中bookTypeId=id行中的                        
                                                                                                                                                                                                                                   bookName和bookTypeName字段创建视图v4
CREATE VIEW v5 AS SELECT tb.bookName,tby.bookTypeName FROM t_book tb,t_booktype tby WHERE tb.bookTypeId=tby.id;            多表创建视图:(同上)表名使用别名
SELECT * FROM v4;            查看视图v4
SELECT * FROM v5;            查看视图v5
DESC v5;            查看视图基本信息
SHOW TABLE STATUS LIKE 'v5';            查看视图基本信息
SHOW TABLE STATUS LIKE 't_book';            查看表的基本信息
SHOW CREATE VIEW v5;            查看视图的详细信息

 9、修改视图

SELECT  * FROM v1;            查看视图v1
CREATE OR REPLACE VIEW v1(bookName,price) AS SELECT bookName,price FROM t_book;            创建或更改视图v1,更改为从表t_book中选择字段的形式
ALTER VIEW v1 AS SELECT * FROM t_book;            修改视图v1为从表中选择的全部字段

INSERT INTO v1 VALUES(NULL,'java good',120,'feng',1);            向视图v1中插入对应的数据(向视图插入相当于向表中插入)
UPDATE v1 SET bookName='java very good',price=200 WHERE id=5;            更新视图id=5的数据
DELETE FROM v1 WHERE id=5;            删除视图中id=5的行数据

DROP VIEW IF EXISTS v4;            删除已存在的视图v4

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值