数据库常用sql语句和操作

数据库操作

标签(空格分隔): mysql

进入:mysql -h hostname -u user_name -p password

如果不写-h hostname默认本机(localhost) 显示所有数据库:show databases; 选定要操作的数据库:use database_name; 显示指定数据库中所有数据表:show tables; 退出数据库:\q

结束当前语句的输入:\c

对库进行操作:

新建数据库:create dtatbase database_name;

删除数据库:drop database database_name;(一次只能删除一个)

对表进行操作:

新建数据表:create table 表名(

列名1 列类型[列的完整性约束],

列名2 列类型[列的完整性约束],

……

列名n 列类型[列的完整性约束]

)default charset=utf9;(显示汉字,默认编码) 显示表的创建结构:desc table_name; 删除表:drop table table_name; 删除其他数据库的表:drop table 数据库名.表名; 往表中插入数据: 一次插入一行:insert [into] 表名([列名]) values(值列表); 如果表名后面没有写列(段)名,默认向表中所有列赋值,另外字符串要用”“和”括起来 赋值的数据类型必须要与表中的相互匹配,具有缺省值的列可以使用default来代替插入的值 查看数据:select * from 表名;

例:select * from student; 一次插入多行:

insert [into] 表名([列名]) values(值列表),(值列表),......;
例:insert into student values(3,'dd','女'),(4,'vv','男'); 

从其他表中引用要插入的数据:

insert [into] 表名([列名]) select <列名> from 源表名[where ...];
create table student1(id int,name varchar(20),sex varchar(10),age int)default charset=utf8;
insert into student1 values(1,"张无忌","男",26),(2,"段誉","男",27);
insert into student select id,name,sex from student1 where id=2;
select * from student;

更改数据库中表的记录:

uodate 表名 set<列名=更新值>[where <更新条件>];
// where 子句是用来限定更新条件的,不带的话更新整列
 例:
        update student1 set sex='女';
        update student1 set sex='男' where id=1;
        update student1 set sex='男',age=22 where id=2;

删除数据表中的记录:

delete from 表名[where <删除条件>];
//不带where会删除表中所有数据,但是表不会被删除
例:
 delete from student1 where age<26;

查询表中数据:

select <列名> from 表名[where <查询条件表达式>][order by<排序的列名>]{asc或者desc]
//asc:升序(默认)
//desc:降序
例:
  select * from student;
  select id ,name from student;
  select * from student where id<=3 order by id;          
  select * from student  where id<=3 order by id desc;

更改表的结构: 为表添加一列:如果没有指定位置默认在列尾添加

alter table 表名 add 列名 建表语句[after 列名];
alter table sutdent add money int after id;

删除一列:

alter table 表名 drop 列名;
alter table student drop age;

更改指定列的默认值:

alter table 表名 alter 列名 set default 默认值;

更改列名和类型:

alter table 表名 change 旧列名 新列名<建表语句>[after 列名];
//当旧列名和新列名相同时,可以改变该列名的类型,不相同时,在改变列名的同时改变类型

为表设置一个主键:即把某一列设置为主键,主键列的每一个成员都是互不相同的,它存在的目的就是唯一的标志一行

alter table 表名 add primary key(列名);
//如果已经存在其他主键,再设置就会出错,设置为主键的一行not null;

把主键设置为自增长

alter table 表名 change 旧列名 新列名 类型 auto_increment;
//设置为自增长的主键,非空,且是主键列,不能省略,不包含(0);
例:
  alter table student change num num int auto_increment;

从特定的位置设置自增长:否则删除一个记录之后再添加会出现断层

alter table 表名 auto_increment=初值;

删除主键:

alter table 表名 drop primary key;
//删除主键之前要删除自增长才能成功
例:alter table table_name change new_type;
例:alter table student drop primary key;

更改表名:

alter table table_name rename as new_table_name;
例:alter table student rename as student2;

例子:
创建一个数据表:

  create table student3(
    -> code int not null auto_increment,
    -> name varchar(20) not null,
    -> age int,
    -> sex varchar(10),
    -> score int,
    -> grade int,
    -> address varchar(20) default '未知',
    -> major varchar(20),
    -> primary key(code))default charset=utf8;

 insert into student3(name,age,sex,score,grade,address,major) 
    -> values('xxx',13,'m',78,1,'asdfgh','sss'),
    -> ('xcc',15,'w',88,2,'afdfdh','nnn'),
    -> ('cxx',9,'m',99,3,'sdsvfbf','vvv'),
    -> ('ccc',45,'m',56,1,'cdfsff','sss'),
    -> ('xbb',34,'w',66,1,'cdfgdv','sss');
查看全体学生的详细信息:
  select * from student3;

查询全体学生的学号和姓名:
select code,name from student3;

字段计算:
select code,age+score from student3;
select code,age+score as xxx from student3;

查询全体学生的学号和姓名,用中文显示列名:
select code as '学号',name as '姓名' from student3;

给表设置别名:
select s.code,s.name from student3 as s;

查询所有年级号(去掉重复的年级号)
select distinct grade from student3;

查询年龄在20及以下的学生的姓名
select name from student3 where age<20;

查询全体学生的所有信息并按年龄的降序排列;
select * from student3 order by age desc;

查询年龄最大的前3个学生的所有信息。
select * from student3 order by age desc limit 3;

查询年龄最大的第4个,5个学生的所有信息:
select * from student3 order by age desc limit 3,2; 

concat:
select concat(name,'is ',age,' years old') from student3 order by age desc; 

计算总数:count(列名)

select count(*) from table_name;

计算一班的平均成绩:

select avg(socre) from where grade=1;

查找专业的最高分和最低分:

select max(score) as '最高分',min(score) as ' 最低分' from student3;

查找专业的平均成绩在70以上的专业

select major,avg(score) as '平均成绩' from student3 group by major having avg(score)>70;

求总和:

select sum(score) from stduent3;

查询年龄[不]20-50之间的学生个人信息

select * from student3 where age[not] between 20 and 50;
select * from where code like 21;

查询名字以’a’开头的所有学生信息;

select * from student3 where name like 'a%';
select * from steudent3 where name like '%a';
select * from student where name like '%a%';
show tables like '%s%';
//年级升序,同一年级按照分数升序排序
select * from student3 order by grade,score desc;

多表查询:

select s.id,s.name,s.age,c.course,c.score from stu as s inner join cour as c on s.id=c.num;

拼接:

select concat(name,'is','age,'years old')from student3 order by age;

内连接(inner join)

select s.id,s.name,s.age,c.course,c.score from stu as s inner join cour as c on s.id=c.num;

左外连接(left join):以左表为主(左表有的全部都有)

select s.id,s.name,s.age,c.course,c.score form stu as s left join cour as c on s.id=c.num;

右外连接(right join):

select s.id,s.name,s.age,c.course,c.score form stu as s right join cour as c on s.id=c.num;

子查询:将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询称为子查询
注:一个select-from-where 语句称为一个查询块
例:
select name,age from stu where id in(select num from cour where course=’语文’);

复制表:

1.复制一张已知的数据表:

create table 新表名 select * from 已知表; 

2.在复制表时限制表中的内容:

create table 新表名select [列名...] from 已知表;

3.创建一个已存在的表的空表

create table 新表名 select * from 已知表 where 0=1;
(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐