#UBUNTU 进入mysql数据库命令:
##进入:
mysql -uroot -p
exit
create database 库名 character set=utf8;
例: create database students_database character set=utf8;
还有几种创建数据库方法:
create schema 库名 character set=utf8;
##关于数据库语句:
如果不存在就创建数据库,存在就忽略:
create database if not exists 库名;
展示数据库名以'db'开头的数据库:
show databases like 'db%';
修改数据库字符集:
alter database 库名 character set=utf8;
删除数据库:
drop database 库名;
删除数据库如果有就删除,没有就忽略:
drop database if not exists 库名;
查询创建数据库字符集:
show create database 库名;
查询数据全局参数:
show variables \G;
查询数据库默认引擎:
show variables like 'default%';
查询数据存储引擎:
show engines;
##修改字符集案例:
alter database students_database character set=gbk;
show databases;
use 库名;
##切换数据库案例:
use students_database;
##展示所有表:
show tables;
show create table 表名;
desc 表名;
创建一个 students表 字段要求 id,name,email,address默认为北京
create table 表名(
id int auto_increment not null primary key comment'ID',
name varchar(30) not null comment'名字',
email varchar(50) not null comment'邮箱',
address varchar(100) null default'北京' comment'地址'
);
删除表:
drop table 表名;
insert into 表名(字段名) values(对应的值);
多横插入:
insert into 表名(字段名) values(对应的值),(对应的值),(对应的值);
select * from 表名;
##查询列表案例:
alter table 表名 add column 新字段名 类型 是否为空;
update 表名 set 字段名=值名 where条件: 主键id=值id;
update 表名 set 字段名=字段值,字段名=字段值 where条件: 主键id=id;
##修改字段中的类型:
alter table 表名 modify 字段名 新字段类型 是否为空;
alter table 表名 drop column 字段名;
##删除表里字段案例:
select 字段名,字段名 from 表名 order by 字段名;
select 字段名,字段名 from 表名 order by 字段名 desc;
select 字段名,字段名 from 表名 order by 字段名 desc limit3;
##检索字段名并绛序只允许显示3条案例:
##检索案例表里条件age字段为21或24的所有内容按age升序排列:
select * from students where age='21' or age='24' order by age;
##检索案例表里条件address字段为北京或天津并age字段小于等于23的所有信息并按升序排列:
select * from students where (address='北京' or address='天津') and age <= '23' order by age;
##检索案例表里条件age字段不是21和23的name,age,address信息并绛序排列:
select name,age,address from students where age not in('21','23') order by age desc;
##检索案例条件birthday字段为’1800-1-1’和’2001-1-1’的name,birthday的内容按升序排列:
select name,birthday from students where birthday between '1800-1-1'and'2001-1-1' order by birthday;
两种方法:
select * from students where age != '23' order by age desc;
select * from students where age <> '23' order by age desc;
两种方法:
select * from students where name like '张%';
select * from students where name like '张_';
select * from students where name like '%葛%';
去除左右空格搜索...葛...的所有信息:
select * from students where trim(name) like '_葛_';
##检索案例表里email字段带有…qq.com的显示name,email所有内容:
select name,email from students where email regexp 'qq.com$';
##检索案例表里email字段除了…qq.com的显示name,email所有内容:
两种方法:
select name,email from students where email regexp '\w*[^qq].com$';
select name,email from students where email regexp '.*[^qq].com$';
##检索案例表里email字段以4到9开头的显示name,email所有内容:
select name,email from students where email regexp '^[4-9]';
##检索案例表里email字段以8849开头的显示name,email所有内容:
select name,email from students where eamil regexp '^8849';
##检索案例表里name字段以刘开头和以备结尾的显示name,email所有内容:
以刘开头:
select name,email from students where name regexp '[[:<:]]刘';
以备结尾:
select name,email from students where name regexp '备$';
##检索案例表里总人数的数量,最小年龄,最大年龄,年龄总和,平均值并起别名:
select count(*) as 总人数,min(age) as 最小年龄,max(age) as 最大年龄,sum(age) as 总和,avg(age) as 平均值 from students;
##检索表里age年龄最大的只需要显示一位的所有信息:
select * from students order by age desc limit 1;
案例:
去掉王..的所有空格:
select * from 表名 where trim(字段名) like '王%';
让字段字母大写:
select upper(字段名) from 表名;
让字段名小写:
select lower(字段名) from 表名;
查询条件长度为2个字符查询abbr_name字段并大写起个别名的内容:
select upper(abbr_name) as 大写 from 表名 where length(abbr_name)=2;
查询条件字段为abbr_name向右数第二匹配wq的字符内容:
select abbr_name from 表名 where right(abbr_name,2)='wq';
从abbr_name的第五个字符开始找,如果找到返回索引,否则返回0:
select name,('l',abbr_name,5) from 表名;
从'fsdsdds'里面第4个字符开始后3个字符取出来包含开始字符 从左往右找:
select substring('fsdsdds',4,3) from 表名;
把表链接到一个框中:
select concat(字段名,字段名) from 表名;
##mysql数据time处理函数:
select curtime(); 获取现在时间 时,分,秒.
select curdate(); 获取现在日期 年,月,日.
select year(now()); 获取现在年份.
select month(now()); 获取现在月份.
select day(now()); 获取现在的日.
select hour(now()); 获取现在的时钟.
select minute(now()); 获取现在的分钟.
select second(now()); 获取现在的秒钟.
select now(); 获取现在的完整时间.
select dayweek(date(now())); 获取现在日期对应的星期.
select time(now()); 获取现在的时间.
#sql语句练习题:
##假设你已经给刚刚创建的students表插入全班同学的信息,现在要求统计来自山西的男同学的平均年龄:
##检索年龄最大的前7位同学的姓名和年龄:
##检索出生日是8月份的学生同学:
##检索出生日是在上半年的同学并按照月份排序:
##检索全班同学的姓:
##使用正则表达式检索出名字字段是以a-c开头的同学:
##使用like和通配符找到姓z并且名只有一个字符的的同学:
##使用正则表达式检索出邮箱字段中包含“_”的同学:
##检索出最后一位入学的同学:
##检索本班同学的年龄并去重:
##检索出生日是周四的同学:
##检索出年龄不是20岁的并且不是天蝎座(出生日期为10月24日-11月22日)的男生:
##检索表里年龄有几个并查看内容:
##检索表里年龄有几个年龄等于25并查看内容:
##创建scores表并将students的表stu_id的主键名,将scores表里的stu_id设为外键与students表里的stu_id相连并插入值:
##两表之间子查询,在students查询name名在stu_id的外键条件是scores表中的stu_id条件是score小于60:
##两个表内连接查询name和score并以绛序排列:
两种方法:
select name,score from 表名 inner join 表名 where 表名.字段主键 = 字段外键
order by score desc;
select name,score from 表名 inner join 表名 on 表名(字段主键) = 表名(字段外键)
order by score desc;
##两个表内连接查询name和score内容条件score小于60:
两种方法:
select name,score from 表名 inner join 表名 where 表名.字段主键 = 字段外键
and score < 60;
select name,score from 表名 inner join 表名 on 表名(字段主键) = 表名(字段外键)
where score < 60;
查询因为scores表名变更别名为p1所以id,teacher,stu_id起p1别名,并连接
scores原表名起别名为p2,连接上p1的stu_id和p2的stu_id 条件p2的id等于31
并查询内容:
select p1.id,p1.teacher,p1.stu_id from scores as p1,scores as p2
where p1.stu_id=p2.stu_id and = 31;
把p1的内容放到了p2上这样查询更快些!
alter table nn modify score float not null unique;
alter table nn drop index score;
select id,stu_id,teacher,score from scores where stu_id = (select stu_id
from scores where id = 31);
select peps.name,scores.score from peps right outer join scores
on peps.s_id = scores.s_id and scores score < 60;
select peps.name,scores.score from peps left outer join scores on
peps.s_id = scores.s_id and scores.score > 60;
select peps.name,scores.score from peps inner join scores on
peps.s_id = scores.s_id and scores.score = 89;
select peps.name,scores.score from peps inner join scores on peps.s_id =
scores.s_id and scores.score < 60 order by score desc;
##左连接查询条件小于60并按照绛序排列:
select peps.name,scores.score from peps left outer join scores on
peps.s_id = scores.s_id and scores.score < 60 order by score desc;
select abbr_name as 姓名_性别,age as 年龄_学号 from students_1803
where stu_id = 1504359 union select sex,stu_id from students_
1803 where stu_id = 1504359;
在查询内容多的时候为了不让union去重可以使用 union all:
select abbr_name as 姓名_性别,age as 年龄_学号 from students_1803
where stu_id = 1504359 union all select sex,stu_id from students_
1803 where stu_id = 1504359;
##利用view视图制作内容并查询:
create view info as select concat(abbr_name,'(',age,')','(',native_place,')') as a from students_1803;
##利用view视图制作内容使用 or replace可以更新原有表请看实验:
create or replace view info as select concat(abbr_name,'(',age,')','(',native_place,')') as a from students_1803;
##view练习案例:
##view两个表连接查询小于50的内容:
SELECT TABLE_NAME,TABLE_COMMENT FROM information_schema.TABLES WHERE table_schema='wzkt';
SELECT t.TABLE_NAME,t.TABLE_COMMENT,c.COLUMN_NAME,c.COLUMN_TYPE,c.COLUMN_COMMENT
FROM information_schema.TABLES t,INFORMATION_SCHEMA.Columns c
WHERE c.TABLE_NAME=t.TABLE_NAME AND t.`TABLE_SCHEMA`='wzkt';
#待续!!