1.创建表

create table if not exists usrinfo( id INT(11), number INT(11), name VARCHAR(255), birthday DATE );

2.查询表结构

show full columns from usrinfo;

desc usrinfo;

describe usrinfo;

3.查询创建表的语句

show create table usrinfo;

4.插入数据

插入单选数据

insert into usrinfo values (12123123,“hello”,“1990-02-15”);

插入多行数据

insert into usrinfo values (12123123,“hello”,“1990-02-15”), (12123123,“cc”,“1991-03-01”);

插入某些列

insert into usrinfo(number,name) values (121234123,“eefef”);

插入某些列多行

insert into usrinfo(number,name) values (121234123,“eefef”), (121234123,“eefef”);

5.查询某一列不重复的值

select distinct number from usrinfo;

6.增加新的列

增加新列

alter table usrinfo add id int(11);

并给修改新列的属性

alter table usrinfo change id id int not null auto_increment primary key;

更改新加列的排序:

把id这列,放到第1列 alter table usrinfo modify id int(11) first;

把birthday这列放在number后面

alter table usrinfo modify birthday date after number;

7.重命名表 和 列名.

更改表名

alter table <old_name> rename <new_name>;

更改列名,后面必须有属性值,才能修改成功

alter table usrinfo change id new_id int(10) ;

更改列名+ 属性,由int 转换为varchar

alter table usrinfo change id new_id varchar(11);

8.删除列.

提前新建一个列 alter table usrinfo add dd varchar(11);
mysql适用于下面的语句, 别的数据库未知.

alter table usrinfo drop dd;

9.删除某个列中某行为null的数据,注意是is null 不是=null

delete from usrinfo where birthday is null;

10.删除一个表

为了删除我先创建一个表create table del(id int(11) not null primary key auto_increment,name varchar(255),phone int(11));

drop table del;

11.返回唯一不同的值

查询单行的唯一不同的值

select DISTINCT birthday from usrinfo;

查询多行唯一不同的值,组合起来是唯一不同的值

select DISTINCT number,birthday from usrinfo;

12.where的简单查询语句

In 和 like

select * from usrinfo where name in (“Hello”);

select * from usrinfo where name like ‘%ello’; %表示多个字符,_ 下划线表示一个字母,like不区分大小写的

binary 区分大小写

select * from usrinfo where name like binary ‘Hello’;

13.and和or

select * from usrinfo where name=‘hello’ and number=‘1233’; select * from usrinfo where name=‘hello’ or name=‘Hello’; select * from usrinfo where name=‘hello’ or number=1233;

14.order by

升序,默认方式也是这种

select * from usrinfo order by number asc;

降序

select * from usrinfo order by number desc;

15.update

update 记录

update usrinfo set number=999 where id=18; update usrinfo set number=999 wehre id in(18,19); update更新必须带where,否则会更新所有的数据

16.limit

查询数据库中从2行到后n行的数据

select * from usrinfo limit 2,n;

查询起始后n行数据,如顶部的5行数据.

等价于select * from usrinfo limit 5;

17.Min 和 Max

查询某列的最小值并赋值给参数

select min(id) as small_id from usrinfo; select max(id) as max_id from usrinfo;

18.count计算搜索得到的行数, sum求合 avg求平均值

sum 和 avg 仅针对所有int数据

select count(id) from usrinfo;

select avc(number) from usrinfo;

19.alias 重命名

MySQL中语句

select id,CONCAT(name,’ , ‘,address) as cc from usrinfo;

其它数据库写法

select id,name,’ , ‘, address as cc from usrinfo;

20.inner join, left join, rigth join, full join

Mysql not have full,jush left join union right join.

默认为join为inner join两个表的交集, left join 取左边表的集合包括交集但不包含右表没有交集的部分,
右连接与左连接相反,全连接是左右表的并集.

select o.id,o.name,c.id,c.number from order as o (inner) join customers as c on o.id = c.id; select o.id,o.name,c.id,c.number from order as o left join customers as c on o.id = c.id; select o.id,o.name,c.id,c.number from order as o right join customers as c on o.id = c.id;

全连接

select o.id,o.name,c.id,c.number from order as o right join customers as c on o.id = c.id union select o.id,o.name,c.id,c.number from order as o left join customers as c on o.id = c.id;

三个表inner join

select o.orderId,o.customerID,cu.costomerID,cu.costomerName,cp.CustomerID,cp.phone1 from (orders as o join customers as cu on where o.CustomerID = cu.CustomerID) join cphone as cp on o.CustomerID = cp.CustomerID;

21. self join

select A.CustomerName as CustomerName1,B.CustomerName as CustomerName2,A.Country from customers A, customers B where A.CustomerID <> B.CustomerID and A.Country= B.Country order by A.Country;

22. union

select CustomerID from orders union select CustomerID from customers;

重复值用ALL

select CustomerID from orders union select CustomerID from customers;

23. group by 把查询到的结果分组

以国家为组统计有多少个id

select count(c.CustomerID),c.Country from orders as o join customers as c on o.customerID = c.CustomerID group by c.Country;

以国家为组统计有多少个id,并按照id个数排序,从小到大

select count(c.CustomerID),c.Country from orders as o join customers as c on o.customerID = c.CustomerID group by c.Country order by count(c.CustomerID);

24. having, having是分组(group by)后的筛选条件,分组后的数据组内再筛选,where则是在分组前筛选.

以country分组,然后找个数超过1的.

select count(CustomerID) as number,Country from customers where CustomerID>1 group by Country having count(CustomerID) > 1;

25. select into, 复制表或表结构的时候, 只得到一个"外壳", clone一个躯体, 原表的主键,外键,约束,触发器,索引都不会被复制过来.

非mysql用法

select * into orders_back from orders;

mysql用法

create table orders_back (select * from orders);

复制部分列

create table order_b1(select orderId,orderDate from orders);

可以增加where语句

create table order_b2(select orderId,orderDate from orders where orderId > 123);

只复制表

create table orders_back3 (select * from orders where 1=2)

26. Insert into select, 从一个表拿数据插入另一个表中,

复制某些字段到另一个表中

insert into orders_back(orderId,customerID,orderDate) select orderId,customerID,orderDate from orders;

复制整个表到另一个表中,两张表的结构属性是一样的

insert into orders_back select * from orders;

也可以后面跟where语句进入, 筛选要复制的列

insert into orders_back select * from orders where orderId > 1;

27. 创建一个数据库, 删除一个数据

你必须有创建或者删除数据库的权限

create database mydata;

删除数据

drop database mydata;

28. 创建一个表时,列的属性的限定

NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK DEFAULT INDEX

check

Mysql 用法
create table person(
    id int(11) primary key,
    Age int(11),
    CHECK (Age > = 18)
);
Oracle SQL server用法
create table person(
    id int(11) primary key,
    Age int CHECK (Age>=18)
        );

多个check条件, 能用mysql, oracle都可用

create tables person(
    id int primary key,
    Age int(11),
    City varchar(255),
    CONSTRAINT CHK_person check (Age>=18 and City='Shanghai')
);
增加一个check条件
alter table person add CHECK (Age>=18);
增加多个check条件, mysql oracle都可用
alter table person add CONSTRAINT CHK_personAge CHECK (Age>=18 and city='Shanghai');
删除表中一个check条件
Mysql用法
alter table person drop CHECK CHK_personAge;
orace/SQL server用法
alter table person drop CONSTRAINT CHK_personAge;

29. Default 用法

创建表的时间
create table person(
    id int(11) primary key,
    Age int,
    City varchar(255) DEFAULT 'Shanghai'
);

增加表的属性时

Mysql用法

alter table person alter City set DEFAULT ‘Shanghai’;

oracle用法

alter table person modify City DEFAULT ‘Shanghai’;

删除默认

Mysql 用法

alter table person alter City drop default;

Oracle SQL server 用法

alter table person alter COLUMN City drop default;

30. Index 索引, 聚集索引一个表最多有一个

创建一个索引和创建多个索引

create index ind_orderId on orders(orderId); create index ind_orderid on orders(orderId, orderDate);

删除一个索引
mysql,格式是alter table table_name drop INDEX index_name;

alter table orders drop INDEX ind_orderId;

Oracle DB2

drop index index_name;

SQL server

drop index table_name.index_name;

31. Auto_INCREMENT 自动增加值

Mysql
create table person(
    id int(11) auto_increment primary key,
    age int(3)
);
SQL server
create table person(
    id int(11) IDENTITY(1,1) primary key,
    Age int(11)
);
Oracle 未知待更新

32. View 视图是原表某些列的影分身, 更改视图也就是更改原表的数据.

create VIEW view_orders_list as select orderId,orderDate from orders;

update view_orders_list set orderId=222 where orderId=22;

更新一个视图, 可以更新列的,直接在下面语句中增加就可以了.

create or replace view view_list as select orderId,orderDate,customerID from orders ;

删除一个视图

drop view view_list;

33. Null Functions

select productName, unitPrice*(unitInstock+IFNULL(unitOrder,0)) from products; select productName, unitPrice*(unitInstock+COALESCE(unitOrder,0)) from products;

34. Cross join 是两个表笛卡尔集

select * from orders cross join usrinfo;

35. update 与 inner join连用

oracle 中用法
update orders set orderDate="1991-02-09" where orders.customerID in(
    select customers.CustomerID from orders join customers on
    orders.customerID = customers.CustomerID;
    );
Mysql用法
update orders  as o join
(select c.customerID from orders as o join customers as c on o.customerID = c.CustomerID)
c on o.customerID = c.customerID
set o.orderDate="1990-09-08";
36 date日期查询特定year month day的人
select * from student where year(birthday)=1990 and month(birthday)=02 and day(birthday)=13;