欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL查询语句

程序员文章站 2024-01-15 20:00:10
...

MySQL

一.MySQL基础

1.增删改

表:
MySQL查询语句

1.增

  • 方式一

    insert into 表(列,列…) values(值,值…);
    – 插入几个列, 就列出几个列,没有插入数据的列自动的赋值为null;

	insert into product(pid,pname) values(null,'Mac');片
  • 方式二

    insert into 表 values(值,值…);
    注:插入所有的列

	insert into product values(null,'iPhonex',8000,10);
	insert into product values(null,'苹果电脑',8000,100);

2.删

  • 语法

    delete from 表 [where条件];

   delete from product where price < 5001;

3.改

  • 语法

    update 表 set 列 = 值 ,列= 值 [where 条件]

   update product set price = 5000;

2.基础查询

  1. 查询所有的列的记录
  • 语法

    select * form 表

    eg:
    select * from product;

2.查询某张表特定列的记录

  • 语法

    select 列名,列名,列名… from 表

   select pname, price from product

3.去重查询

  • 语法

    SELECT DISTINCT 字段名 FROM 表名; //要数据一模一样才能去重

   select distinct price from product;

4.别名查询

  • 语法

    select * form 表 别名 where 别名.列名

   select pname 商品名称, price 价格 from product;

5.逻辑运算&模糊查询

and (多个条件同时成立)

...and..    闭区间(包含临界值)  

--查询价格在10到100之间(包含10和100)
SELECT * FROM product WHERE price BETWEEN 10 AND 100;

or(多个条件任一成立)

-- 查询出商品价格 小于35 或者商品价格 大于900
SELECT * FROM product WHERE price > 900 OR price < 35;

in(包含查询)

--查询出商品分类ID在 1,3,4里面的所有商品
SELECT * FROM product WHERE cno IN (1,3,4)

like (模糊查询; 需要和占位符一起用; _占一位; %占0~n位)

 查询姓张的用户   					 username like  '张%';  张  张三 张三三 张三三三

 查询姓张的用户 (名字是两个字的)	    username like  '张_';        

 查询名字叫张三的用户				  username like  '%张三%';      张三    

二.MySQL进阶

表:

MySQL查询语句

1.排序查询

order by

–升序(默认)

SELECT * FROM product ORDER BY score ASC ;

–降序

SELECT * FROM product ORDER BY score DESC ;

–组合查询

select * from product order by score desc, age desc;

2.聚合函数
MySQL查询语句

  • 语法

    SELECT 聚合函数(列名) FROM 表名 [where 条件];

    – 求出学生表里面的最高分数 SELECT MAX(score) FROM student;

  • 聚合函数会忽略空值NULL

3.分组查询

group by

  • 语法

    SELECT 字段1,字段2… FROM 表名 [where 条件] GROUP BY 列 [HAVING 条件];

    eg:
    根据性别分组, 统计每一组学生的总人数

   select sex, count(*) from student group by sex;

MySQL查询语句
在这里插入代码片 根据性别分组, 统计每一组学生的总人数> 5的(分组后筛选)

   select  sex, count(*) from  student   group by sex having  count(*) > 5

MySQL查询语句

面试题:

MySQL查询语句

4.分页查询 limit

limit

  • 语法

    select … from … limit a ,b.

  • b: 一页显示的数量(我们根据需求自己定义的)

  • a: 从哪里开始查询(从0开始计数) ;

三.多表间的关系

1.一对多
MySQL查询语句

  • 在多方创建一个字段作为外键,指向一方主键

alter table product add foreign key(cid) references category(cid)

2.多对多
MySQL查询语句

  • 新建一张中间表,至少包含两个字段,都作为外键,分别指向各自的主键

      alter table s_c_table add foreign key(sno) references student(sid);
      alter table s_c_table add foreign key(cno) references cource(cid);
    

四.MySQL多表查询

—多表查询最好用别名

1.内连接查询

隐式内连接

select [字段,字段,字段][*] from a,b where 连接条件 (a表里面的主键 = b表里面的外键) 

显示内连接

select [字段,字段,字段][*] from a [inner] join b on 连接条件 [ where 其它条件]

2.外连接

1.左外连接

可以理解为:在内连接的基础上保证左边表的数据全部显示

  • 语句

    select 字段 from a left [outer] join b on 条件

例:

SELECT * FROM t_category c LEFT OUTER JOIN t_product p ON c.cid = p.cno

2.右外连接

可以理解为:在内连接的基础上保证右边表的数据全部显示

  • 语句

    select 字段 from a right [outer] join b on 条件

例:

SELECT * FROM t_category c RIGHT  OUTER JOIN t_product p ON c.cid = p.cno

3.子查询(要多练)

表:

MySQL查询语句

1.子查询的结果是一个值的情况

1.子查询结果只要是单行单列,肯定在WHERE后面作为条件,父查询使用:比较运算符,如:> 、<、<>、= 等

SELECT 查询字段 FROM 表 WHERE 字段=(子查询);

2.查询类别是手机数码的所有商品信息

select *from product where cno =  (SELECT cid FROM category where cname ='手机数码');

3.查询和方便面是同一类别的商品信息,但是不包括方便面

SELECT *from product where cno = (SELECT cno from Product where pname ='方便面') and pname <> '方便面';

2.子查询的结果是单列多行的情况

1.子查询结果是单例多行,结果集类似于一个数组,父查询使用IN运算符

SELECT 查询字段 FROM 表 WHERE 字段 IN (子查询);

2.查询类别属于手机数码和食物的商品信息

SELECT * FROM t_product WHERE cno in (SELECT cid FROM t_category WHERE cname in('手机数码','食物'));

3.子查询的结果是多行多列的情况

表:
MySQL查询语句

1.子查询结果只要是多列,肯定在FROM后面作为表; 子查询作为表需要取别名,否则这张表没有名称则无法访问表中的字段

SELECT 查询字段 FROM (子查询) 表别名 WHERE 条件;

2.查询所属类别编号(cno)是1的商品里面的最高价格

SELECT MAX(c1.price) from (SELECT * FROM product where cno = 1) as c1
相关标签: MySQL查询语句