mysql查询姓名第二个字_Mysql(2)查询实例

一:MySQL简介与安装

MySQL是一种中型、易用的关系型数据库管理系统(DBMS,Database Management System)。

安装步骤:

第一步:  sudo apt-get install mysql-server

第二步:  sudo apt install mysql-client

第三步:  sudo apt install libmysqlclient-dev

进入MySQL环境:

mysql -u root -p

二:MySQL常用操作命令

1. show databases;      # 显示所有数据库

2. use 数据库名称;      # 进入(使用)某个数据库

3. show tables;        # 显示当前数据库中所有的表

4. desc 表名称;        # 查看表的结构

三:基本SQL语句

SQL:Structured Query Language,结构化查询语言,专门用来操作关系型数据库的

语言。

1. 创建数据库

create database 数据库名 [default character set 'utf8'];

2. 创建表

create table 表名称(

字段名  字段数据类型  约束,

字段名  字段数据类型  约束,

......

字段名  字段数据类型  约束

);

3. 插入记录

方式一:

insert into 表名称(字段名1,字段名2,...)values(值1,值2,...);

方式二:

insert into 表名称 values(值1,值2,...);

方式三:

insert into 表名称(字段名1,字段名2,...)values(值1,值2,...),(值1,值2,...),

(值1,值2,...).....(值1,值2,...);

4. 修改记录

update 表名称 set 字段名=修改值 [,字段名=修改值,...] [where 条件];

5. 删除记录

delete from 表名称 [where 条件];

6. 查询记录

select 字段列表 from 表名称 [where 条件];

7. 增加一个字段

alter table 表名 add 新字段的名字  字段属性

alter table students add sex char(10)

8. 删除一个字段

alter table 表名 change 老字段名 新字段名 字段属性;

例如:

alter table students change id id int(4) auto_increment;

9. 修改某个字段 --- 修改属性

alter table students change id id int(4);

10. 修改某个字段 --- 删除主键

alter table students drop primary key;

11. 修改某个字段 --- 添加主键

alter table students add primary key(id);

alter table students change id id int(4) primary key;

四:限制查询、分页查询、排序查询、分组查询

1.限制查询

第一种情况:查询限定条数

select 字段列表 from 表名称 [where 条件] limit 最多记录数;

第二种情况:从指定偏移量查询限定条数

select 字段列表 from 表名称 [where 条件] limit 偏移量,最多记录数;

2.分页查询

已知当前页为currentPage,每页最多显示的记录数为pageSize,则currentPage页

显示的表中的记录为:

select 字段列表 from 表名称 [where 条件]

limit (currentPage-1)*pageSize,pageSize;

3.排序查询

select 字段列表 from 表名称 [where 条件] order by 字段名[desc] [,字段名...];

4.MySQL中的聚合函数

A:  max(字段名)  获取某字段中的最大值

B:  min(字段名)  获取某字段中的最小值

C:  sum(字段名)  计算某字段值的和

D:  avg(字段名)  计算某字段的平均值

E:  count(字段名) 计算某字段值中不为null的记录数

count(*)  计算表中的总记录数

5.分组查询

select 字段列表 from 表名称 [where 条件]

group by 分组字段列表 [having 对分组后的筛选条件];

注意:select后的字段列表应该包含在group by后的分组字段列表中!

一:模糊查询

模糊查询中的两个通配符:

1.  %  代表任意多个任意字符

2.  _  代表任意一个字符

模糊查询的SQL语法:

select 字段列表 from 表名称 where 字段名 like 匹配条件;

二:外键(foreign key)

外键用来约束子表的记录与父表对应。

constraint 约束名 foreign key(用来关联父表的字段)

references 父表名(父表中用来关联子表的字段,一般为主键);

三:多表查询

1. 等值连接

select 字段列表 from 表A,表B,... where 连接条件 [其他过滤条件];

2. 内连接

select 字段列表 from 表A inner join 表B on 连接条件 [其他过滤条件];

3. 外连接

左外连接:

select 字段列表 from 表A left join 表B on 连接条件 [其他过滤条件];

注意:左外连接的查询结果不但包括了符合连接条件的查询记录,而且还包括了

左表中不符合连接条件的记录。

右外连接:

select 字段列表 from 表A right join 表B on 连接条件 [其他过滤条件];

注意:右外连接的查询结果不但包括了符合连接条件的查询记录,而且还包括了

右表中不符合连接条件的记录。

例子1:(多表查询)

1.使用“等值连接”查询学生姓名、学生成绩、学校名称。

select student.name,student.score,school.schoolname

from school,student where student.school_id=school.schoolid;

2.使用“等值连接”查询出“张红”的学生姓名、学生成绩、学校名称。

select student.name,student.score,school.schoolname

from school,student where student.school_id=school.schoolid

and student.name='张红';

3.使用“内连接”查询学生姓名、学生成绩、学校名称。

select student.name,student.score,school.schoolname

from school inner join student on student.school_id=school.schoolid;

4.使用“内连接”查询出“张红”的学生姓名、学生成绩、学校名称。

select student.name,student.score,school.schoolname

from school inner join student on student.school_id=school.schoolid

and student.name='张红';

5.先插入一条学校记录,再使用“左外连接”查询学生姓名、学生成绩、学校名称,

要求显示所有学校的记录。

insert into school(schoolname,note)values('东北师范',null);

select student.name,student.score,school.schoolname

from school left join student on student.school_id=school.schoolid;

例子2:(限制,分页。。。。)

1.创建一个名为mydb的数据库

create database mydb default character set 'utf8';

2.进入mydb

use mydb;

13:55 2018/5/29

3.创建student表

create table student(

stuid  int  auto_increment primary key,

name  varchar(20)  not null,

age    int,

score  float    not null,

note    text

);

4.向student表中插入一条记录

insert into student(name,age,score,note)values('风清扬',20,93.5,'风清扬独孤九剑');

插入成功之后,查询表的所有记录:

select * from student;

insert into student values(23,'令狐冲',18,65.5,'家住华山');

insert into student(name,age,score)values('郭靖',25,62),('黄蓉',24,73.5),

('马云',40,79.5);

5.把学生表中所有的记录的成绩score改为60分

update student set score=60;

6.将姓名为“令狐冲”的记录的成绩改为75分

update student set score=75 where name='令狐冲';

7.删除学号为27的学生记录

delete from student where stuid=27;

8.查询所有学生的姓名和成绩,并以别名的形式显示字段

select name as 姓名,score as 成绩 from student;

9.查询出所有成绩在85到95之间的学生记录

select * from student where score >=85 and score <= 95;

或者

select * from student where score between 85 and 95;

10.查询所有备注信息不为null的学生记录

select * from student where note is not null;

11.查询学生表中的前三条记录

select * from student limit 3;

12.查询成绩大于等于70分的学生中,前两条记录

select * from student where score >= 70 limit 2;

13.查询学生表中第三条与第四条记录

select * from student limit 2,2;

14.假如每页最多显示2条记录,查询第三页应该显示的记录

select * from student limit 4,2;

15.按照成绩从高到低,将学生排序

select * from student order by score desc;

16.按照成绩从高到低,将学生排序,如果成绩相等则再按照年龄降序排序

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

===========================以下为分组查询相应的SQL===========================

17.创建商品表product,并添加记录

create table product(

proid    int    auto_increment  primary key,

proname  varchar(20)  not null,

price    float  not null,

type      varchar(20)  not null,

note      text

);

insert into product(proname,price,type,note)values('锅巴',5,'零食',null),

('洗衣粉',8,'日用品',null),('可口可乐',12,'饮料','新品上市的Cola'),

('辣条',2,'零食',null),('脸盆',10,'日用品',null),('薯片',13,'零食',null),

('脉动',6,'饮料',null);

18.按照商品类型type对product表中的记录进行分组,求出每一组的平均价格

select type as 类型,avg(price) as 平均价格 from product group by type;

19.按照商品类型type对product表中的记录进行分组,求出零食组的平均价格

select type as 类型,avg(price) as 平均价格 from product

group by type having type='零食';

例子三:(模糊查询)

创建worker表

create table worker(

work_id  int  auto_increment primary key,

name    varchar(20),

job    varchar(20),

salary  float

);

insert into worker(name,job,salary)values('张二强','修车',5000),

('王小刚','美容',3500),('李刚','经理',6000),('王娟','老板娘',7000);

1. 查询所有姓王的工人

select * from worker where name like '王%';

2. 查询名字中带有“刚”的工人

select * from worker where name like '%刚%';

3. 查询名字中第二个字是"刚"的工人

select * from worker where name like '_刚%';

例子四:(外键)

学校表

create table school(

schoolid    int  auto_increment primary key,

schoolname  varchar(30)  not null,

note      text

);

insert into school(schoolname,note)values('清华大学','清华大学很好')

,('北京大学','北大不错'),('交大','交大也很好');

学生表

create table student(

stuid    int  auto_increment primary key,

name    varchar(20) not null,

score  double not null,

sex    varchar(10),

school_id int,

constraint fk_student foreign key(school_id) references school(schoolid)

on delete cascade on update cascade

);

insert into student(name,score,sex,school_id)values('张三',92,'男',1),

('张三丰',96,'男',1),('李娟',88,'女',2),('张红',86,'女',2),

('李芬',85,'女',3);

四:子查询(嵌套查询)

在外部查询SQL语句中,可以包含其他内部查询的语句,这个内部查询(也叫嵌套查询)

就是子查询;子查询需要使用括号括起来;子查询的结果一般作为外部查询语句的条件。

子查询经常使用的关键字:

1. in

判断某字段的值是否在子查询结果集中

2. all

判断某字段的值是否满足操作符对子查询结果集所有值的比较

3. any

判断某字段的值是否满足操作符对子查询结果集任意一个值的比较

五:“一对多”与“多对多”关系表设计

1. “一对多”关系表设计:

在“多”的一方中,设置外键,关联“一”的一方。(eg:学校表("一")与学生表("多"))

2. “多对多”关系表设计:

“多对多”关系表的设计需要引入一个中间表,中间表负责维护“多对多”关系表。

中间表至少需要包含两个字段,这两个字段分别用来关联这两个“多对多”的关系表。

通常会将这两个字段设置成外键,关联两个“多”表的主键。

可以通过将这两个字段设置成联合主键的方式,用来避免组合值重复。

六.配置远程连接MySQL的权限

1.sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

对该文件进行编辑:注释掉 bind-address = 127.0.0.1

2.进入MySQL环境,授予root用户所有权限

grant all on *.* to 'root'@'%' identified by '你自己MySQL的root用户密码'

with grant option;

3.刷新权限

flush privileges;

4.退出MySQL环境,并重启mysql服务

systemctl restart mysql

你可能感兴趣的:(mysql查询姓名第二个字)