mysql/sqlserver数据库sql语句练习

1、在test数据库上建表
create table Student
(
StudentName varchar(200) not null,
BatchID int comment '批次编号',
RegNo varchar(100) comment '注册号码',
StudentAddress varchar(200) comment '注册地址',
Phone varchar(15) comment '电话',
DateOfBirth datetime comment '生日',
AdmissionDate datetime comment '注册日期'
);
create table DemoTable(Name VarChar(20),Age VarChar(3));
create table ThisTable(Firstname Text,Lastname Text);
mysql:
mysql> create Table get0(Word nvarchar(31) NOT NULL,Comment nvarchar(50) NOT NULL);
mysql报错的写法:
mysql> create Table get0(Word nvarchar(31) COLLATE Chinese_PRC_CI_AS NOT NULL,Comment nvarchar(50) COLLATE Chinese_PRC_CI_AS NOT NULL);
ERROR 1273 (HY000): Unknown collation: 'Chinese_PRC_CI_AS'
mysql> create Table get(Word nvarchar(31) NOT NULL,Comment nvarchar(50) NOT NULL);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'get(Word nvarchar(31) NOT NULL,Comment nvarchar(50) NOT NULL)' at line 1
mysql> CREATE TABLE OFFICES(OfficeID nvarchar(4),OfficeName nvarchar(10));
mysql> create Table Singer(SingerID int AUTO_INCREMENT not NULL,SingerName nvarchar(31) NOT NULL,Birthday datetime not null,PRIMARY KEY (SingerID ASC));
IDENTITY、COLLATE Chinese_PRC_CI_AS是sql server的写法:
create Table Singer(SingerID int IDENTITY(1,1) not NULL,SingerName nvarchar(31) COLLATE Chinese_PRC_CI_AS NOT NULL,Birthday datetime not null);
create Table userphoto(ID int IDENTITY(1,1) not NULL,UserName nvarchar(31) COLLATE Chinese_PRC_CI_AS NOT NULL,Old int not null,photo image);
create Table get(Word nvarchar(31) COLLATE Chinese_PRC_CI_AS NOT NULL,Comment nvarchar(50) COLLATE Chinese_PRC_CI_AS NOT NULL);
增加字段
ALTER TABLE Student ADD IsGuest tinyint not null default 0;
ALTER TABLE Student ADD FaceUrl nvarchar(255);
ALTER TABLE Student modify column FaceUrl nvarchar(255) comment '头像url';
show full columns from Student;

2、在test数据库的表中加入记录、更新记录
INSERT INTO OFFICES(OfficeID,OfficeName)VALUES ("a1", "bbb");
INSERT INTO OFFICES(OfficeID,OfficeName)VALUES ("A1", "Bbb");
UPDATE OFFICES SET OfficeID = UCASE(OfficeID);
UPDATE OFFICES SET OfficeID = LCASE(OfficeID);
DELETE FROM OFFICES;
Insert into DemoTable(Name,Age)Values('韩Ivan',27);
Insert into get0(Word,Comment)Values('poet','诗人');
mysql> Insert into Singer(SingerID,SingerName,Birthday)Values(1,'张柏芝','1980-5-24 0:00:00');
mysql> Insert into Singer(SingerName,Birthday)Values('Ivan','1960-5-24 0:00:00');
Query OK, 1 row affected (0.00 sec)

mysql> select * from Singer;
+----------+------------+---------------------+
| SingerID | SingerName | Birthday |
+----------+------------+---------------------+
| 1 | 张柏芝 | 1980-05-24 00:00:00 |
| 2 | Ivan | 1960-05-24 00:00:00 |
+----------+------------+---------------------+
2 rows in set (0.00 sec)

mysql> update Singer set SingerName='刘德华',Birthday='1961-9-27 0:00:00' where SingerID=2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from Singer;
+----------+------------+---------------------+
| SingerID | SingerName | Birthday |
+----------+------------+---------------------+
| 1 | 张柏芝 | 1980-05-24 00:00:00 |
| 2 | 刘德华 | 1961-09-27 00:00:00 |
+----------+------------+---------------------+
2 rows in set (0.00 sec)


3、跨表查询
sql中inner join、left join 、right join之间的区别
left join 是left outer join简写
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行
例子:
A表(a1,b1,c1) B表(a2,b2)
a1 b1 c1 a2 b2
01 数学 95 01 张三
02 语文 90 02 李四
03 英语 80 04 王五
select A.*,B.* from A inner join B on(A.a1=B.a2);
结果是:
a1 b1 c1 a2 b2
01 数学 95 01 张三
02 语文 90 02 李四
SELECT * FROM A INNER JOIN B ON A.a1=B.a2;
SELECT A.a1, B.b2, A.b1,A.c1 FROM A INNER JOIN B ON A.a1=B.a2;
SELECT * FROM A,B;/*求笛卡儿积,A有3条记录,B有3条记录,则笛卡儿积有9条记录*/
select A.*,B.* from A left join B on(A.a1=B.a2);
select A.*,B.* from A left outer join B on(A.a1=B.a2);
结果是:
a1 b1 c1 a2 b2
01 数学 95 01 张三
02 语文 90 02 李四
03 英语 80 NULL NULL

select A.*,B.* from A right outer join B on(A.a1=B.a2);
结果是:
a1 b1 c1 a2 b2
01 数学 95 01 张三
02 语文 90 02 李四
NULL NULL NULL 04 王五

mysql报错:
select A.*,B.* from A full outer join B on(A.a1=B.a2);
变通处理的:
select * from A left join B on A.a1=B.a2 union select * from A right join B on A.a1=B.a2;
结果是:
a1 b1 c1 a2 b2
01 数学 95 01 张三
02 语文 90 02 李四
03 英语 80 NULL NULL
NULL NULL NULL 04 王五

将下面的sql脚本复制到Xshell终端里回车执行:
USE `test`;

-- ----------------------------
-- Table structure for A
-- ----------------------------
DROP TABLE IF EXISTS `A`;
CREATE TABLE `A` (
`a1` varchar(10) NOT NULL,
`b1` varchar(10) NOT NULL,
`c1` smallint(5) NOT NULL
);

-- ----------------------------
-- Table structure for B
-- ----------------------------
DROP TABLE IF EXISTS `B`;
CREATE TABLE `B` (
`a2` varchar(10) NOT NULL,
`b2` varchar(10) NOT NULL
);

-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `A` VALUES ('01', '数学', '95');
INSERT INTO `A` VALUES ('02', '语文', '90');
INSERT INTO `A` VALUES ('03', '英语', '80');
INSERT INTO `B` VALUES ('01', '张三');
INSERT INTO `B` VALUES ('02', '李四');
INSERT INTO `B` VALUES ('04', '王五');

select A.*,B.* from A inner join B on(A.a1=B.a2);


2007年笔记:
SELECT语句的完整格式,它包括六个子句,其中 SELECT 和 FROM 子句是必须的,其它子句可以任选,每个子句的功能如下 :
1、Select 子句列出所有要求 SELECT 语句检索的数据项。它放在 SELECT 语句开始处,指定此查询要检索的数据项。这些数据项通常用选择表表示,即一组用“,”隔开的选择项。按照从左到右的顺序,每个选择项产生的一个列的查询结果,一个选择项可能是以下项目:
(1)、列名:标识 FROM 子句指定表中的列。如果列名作为选择项,则 SQL 直接从数据库表中每行取出该列的值,再将其放在查询结果的相应行中。
(2)、常数:指定在查询结果的每行中都放上该值。
(3)、SQL 表达式:说明必须将要放入查询结果中的值按表达式的规定进行计算。
2、From 子句列出包含所要查询数据的表,它由关键字 FROM 后跟一组用逗号分开的表名组成。每个表明都代表一个包括该查询要检索数据的表。这些表称为此 SQL 语句的表源,因为查询结果都源于它们。
3、Where 子句告诉 SQL 只查询某些行中的数据,这些行用搜索条件描述。
4、Group By 子句指定汇总查询,即不是对每行产生一个查询结果,而是将相似的行进行分组,再对每组产生一个汇总结果。
5、Having 子句告诉 SQL 只产生有 Group By 得到的某些组的结果,和 Where 子句一样,所需要的组也用一个搜索条件指定。
6、Order By 子句将查询结果按一列或多列中的数据排序。如果省略此子句,则查询结果将是无序的。
CREATE DATABASE tianjiao DEFAULT CHARACTER SET=utf8;
USE tianjiao;
CREATE TABLE sales
(
NAME VARCHAR(15) NOT NULL COMMENT '姓名',
sex TINYINT COMMENT '性别:0男,1女',
salary INT COMMENT '工资',
target INT COMMENT '销售目标',
sales INT COMMENT '销售额',
district VARCHAR(15) COMMENT '地区'
);
INSERT INTO sales(NAME,sex,salary,target,sales,district)VALUES('书生',0,2500,8000,9000,'上海');
INSERT INTO sales(NAME,sex,salary,target,sales,district)VALUES('吴冠军',0,3000,10000,9999,'北京');
INSERT INTO sales(NAME,sex,salary,target,sales,district)VALUES('雷鸣',0,2000,8000,10000,'四川');
INSERT INTO sales(NAME,sex,salary,target,sales,district)VALUES('雪儿',1,2500,5000,6000,'广州');
INSERT INTO sales(NAME,sex,salary,target,sales,district)VALUES('顾一',0,2600,9000,9800,'大连');
INSERT INTO sales(NAME,sex,salary,target,sales,district)VALUES('阿卓',1,2000,4000,4000,'天津');
INSERT INTO sales(NAME,sex,salary,target,sales,district)VALUES('熠天',0,4000,20000,20000,'全国');
SELECT NAME,target,sales FROM sales;
SELECT NAME,target,sales FROM sales WHERE sex=0;
SELECT NAME,target,sales FROM sales WHERE sales>target AND sex=0 ORDER BY target;

posted on 2019-10-29 22:43  梦回第四帝国  阅读(...)  评论(...编辑  收藏

导航