微机接口与原理期末整理

更新时间:2023-10-19 17:32:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C#中连接数据库的添加查找方法 using System.Data.SqlClient; namespace WindowsApplication3 { public partial class Form1 : Form { public Form1()

{ InitializeComponent();}

private void button1_Click(object sender, EventArgs e)//添加按钮

{ SqlConnection conn = new SqlConnection(\连接对象st是表的名称 int Sex = 1;

if (radioButton2.Checked) Sex = 0;

String sqlString=String.Format(\ SqlCommand cmd = new SqlCommand(sqlString,conn);// try

{ conn.Open();//打开连接会出现异常 int row= cmd.ExecuteNonQuery(); if (row == 0)

MessageBox.Show(\ else MessageBox.Show(\ }

catch ( Exception ex)

{ MessageBox.Show(ex.Message.ToString());//捕捉异常} finally

{ conn.Close();//只要出现异常就关闭连接} }

private void button2_Click(object sender, EventArgs e)//查找按钮

{ SqlConnection conn = new SqlConnection(\ string sqlString = \ SqlCommand cmd2 = new SqlCommand(sqlString,conn); conn.Open();

SqlDataReader sdr = cmd2.ExecuteReader(); if (sdr.HasRows) { sdr.Read();

textBox2.Text=sdr[\ textBox3.Text = sdr[\

if (bool.Parse(sdr[\转换成布尔类型判断 radioButton1.Checked = true; else radioButton2.Checked = true; // sdr.Close();}

else MessageBox.Show(\没有查询到该学生\ conn.Close(); } } } C#记事本部分代码 namespace _2 {public partial class Form1 : Form {public Form1()

{InitializeComponent();}

private void ntsmenu_Click(object sender, EventArgs e)

{richTextBox1.Clear();//新建}

private void opsmenu_Click(object sender, EventArgs e)

{ if (openFileDialog1.ShowDialog() == DialogResult.OK && openFileDialog1.FileName != \ {richTextBox1.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.PlainText);//打开} }

private void stsmenu_Click(object sender, EventArgs e)

{if (saveFileDialog1.ShowDialog() == DialogResult.OK && saveFileDialog1.FileName != \

{ richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);//保存} }

private void atsmennu_Click(object sender, EventArgs e)

{ if (saveFileDialog1.ShowDialog() == DialogResult.OK && saveFileDialog1.FileName != \

{ richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);//另保存} }

private void xtsmenu_Click(object sender, EventArgs e)

{ this.Close();//退出}

private void utsmenu_Click(object sender, EventArgs e) { //撤销 richTextBox1.Undo();}

private void rtsmenu_Click(object sender, EventArgs e)

{ //重复 }

private void ttsmenu_Click(object sender, EventArgs e) { //剪切richTextBox1.Cut();}

private void ctsmenu_Click(object sender, EventArgs e) { richTextBox1.Copy();//复制}

private void ptsmitem_Click(object sender, EventArgs e) { ////粘帖richTextBox1.Paste(); }

private void atsmenu_Click(object sender, EventArgs e) { //全选richTextBox1.SelectAll(); }

private void tsmbady_Click(object sender, EventArgs e) { //字体设置

fontDialog1.ShowColor = true;

if(fontDialog1.ShowDialog()==DialogResult.OK){ richTextBox1.Font = fontDialog1.Font;

richTextBox1.ForeColor = fontDialog1.Color; } }

private void tsmauto_Click(object sender, EventArgs e) { //自动换行richTextBox1.WordWrap = false; } private void time_Click(object sender, EventArgs e)

{ richTextBox1.AppendText(DateTime.Now.ToLocalTime().ToString());//显示日期时间 richTextBox1.AppendText(DateTime.Now.DayOfWeek.ToString());//显示星期 } } } 教务管理系统 namespace 管理系统 { class Program

{ static void Main(string[] args)

{ Hashtable ht = new Hashtable (); string key;string val;

Console.WriteLine(\欢迎使用2009级学生管理系统\

Console.WriteLine(\ Console.WriteLine(\请选择如下操作:\

Console.WriteLine(\添加 B:查询 C:删除 D:修改 E:退出系统\ Console.WriteLine(\ string r = Console.ReadLine(); while (r!=\ { switch (r)

{ case \请输入学生学号:\

key= Console .ReadLine ();Console .Write (\请输入学生姓名:\ val=Console .ReadLine ();ht.Add (key,val);break;

case \请输入要查询的学号:\ key= Console .ReadLine (); if(ht.Contains(key))

Console .WriteLine (\学生姓名为:{0}\ else Console.WriteLine(\您输入的学生学号不存在\ break;

case \请输入要删除的学号:\ key= Console .ReadLine ();ht.Remove(key); break;

case \请输入要修改的学号:\ key= Console .ReadLine ();

Console .WriteLine (\请输入修改后学生姓名:\ ht[key] = Console.ReadLine(); break;}

Console.WriteLine(\请选择如下操作:\

Console.WriteLine(\添加 B:查询 C:删除 D:修改 E:退出系统\ Console.WriteLine(\ r = Console.ReadLine();

}}}} 分割连接 namespace SplitJoinExample { ///

/// 此示例演示使用Split()和Join()方法分割和连接字符串 ///

class Program

{ static void Main(string[] args)

{ string inputString; // 输入的字符串

string[] splitStrings; // 分割后的字符串数组 string joinString; // 连接后的新字符串 // 输入提示

Console.WriteLine(\请输入一串字符串,用空格分隔单词:\ inputString = Console.ReadLine();// 接收输入

splitStrings = inputString.Split(' '); // 以空格作为分隔符分割字符串 // 将分割后的字符串输出

Console.WriteLine(\分割后的字符串为:\ foreach (string s in splitStrings) { Console.WriteLine(s);}

// 将分割后的字符串使用下划线连接在一起 joinString = string.Join(\ // 将连接后的字符串输出

Console.WriteLine(\连接后的新字符串为:{0}\ Console.ReadLine();}}} BinarySerch方法反回其中的元素5的下标 //给定8个数,存在数组中,利用Array类的BinarySerch方法反回其中的元素5的下标 namespace ConsoleApplication5 {class Program

{static void Main(string[] args) {int[] myArr ={8,7,6,5,4,3,2,1}; Array.Sort(myArr); int target = 5;

int result = Array.BinarySearch(myArr, target); Console.WriteLine(\的下标为{1}\ Console.ReadLine(); } }} sort方法排序 //给定8个数,将这些数存在数组中,利用Array类的Sort方法按从小到达顺序输出 namespace ConsoleApplication4 {class Program

{static void Main(string[] args)

{ int[] array = new int[] {8,7,6,5,4,3,2,1}; Console.WriteLine(\原始数组:\ for (int i = 0; i < array.Length; i++) Console.Write(\ Console.WriteLine();//换行 Array.Sort(array);

Console.WriteLine(\排序后的数组:\ for (int i = 0; i < array.Length; i++)

Console.Write(\冒泡排序法升序排列 //给定数组:,要求用冒泡排序法将其升序排列 namespace ConsoleApplication7 {class Program

{static void Main(string[] args)

{int[] SortArray = new int[] {78,89,90,56,79,345,217,5,13,88};

Console.WriteLine(\待排序序列:\ for (int i = 0; i < SortArray.Length; i++) Console.Write(\ \ Console.WriteLine();

for(int i=SortArray.Length-1;i>=0;i--) for (int j = 0; j < i; j++)

{if (SortArray[j] > SortArray[j + 1]) {int temp = SortArray[j];

SortArray[j] = SortArray[j + 1]; SortArray[j + 1] = temp;}} Console.WriteLine(\排序后序列:\ for (int i = 0; i < SortArray.Length; i++)

Console.Write(\ \ } }} 排序 //给定8个数:87654321将这些数存在数组中,按从小到大输出 namespace ConsoleApplication3 {class Program

{static void Main(string[] args) { int i, j, temp, m;

int[] array = new int[] {8,7,6,5,4,3,2,1}; for (j = 0; j < array.Length; j++) { temp = j;

for (j = 0; j < array.Length; i++) { if (array[i] < array[temp]) temp = i;} if (temp != j)

{ m = array[j];

array[j] = array[temp]; array[temp] = m;}

}

Console.WriteLine(\

for (j = 0; j < array.Length; j++)

Console.WriteLine(\ \ }}} 判断数组中是否含赵六 namespace ConsoleApplication6 {class Program

{static void Main(string[] args)

{ string[] arrSname ={\大宝\张三\李四\赵六\赵二\麻子\ //判断是否含某值

string target = \赵六\

bool result = ((System.Collections.IList)arrSname).Contains(target); Console.WriteLine(\包含{0}?{1}\ }}} time类的构造函数及其重载 namespace ConsoleApplication13 { class Time

{ public int nHour, nMinute, nSecond; public Time()//构造函数

{ nHour = nMinute = nSecond = 0;} public Time(int Hour) { nHour = Hour;

nMinute = nSecond = 0;}

public Time(int Hour, int Minute)//重载2 { nHour = Hour;

nMinute = Minute; nSecond = 0;}

public Time(int Hour, int Minute, int Second)//重载3 { nHour = Hour; nMinute = Minute; nSecond = Second;}} class Text//程序入口 { static void Main() { Time t1,t2,t3,t4; t1 = new Time();

t2 = new Time(10); t3 = new Time(10,20); t4 = new Time(10,20,30);

Console.WriteLine(\时间为:{0}时{1}分钟{2}秒\ Console.WriteLine(\时间为:{0}时{1}分钟{2}秒\ Console.WriteLine(\时间为:{0}时{1}分钟{2}秒\ Console.WriteLine(\时间为:{0}时{1}分钟{2}秒\创建类 namespace ConsoleApplication11 { //学生类

public class student

{ public string strName; public int nAge;

public void SetAge(int age) { this.nAge = age; }

public int GetAge() { return this.nAge; } }

class Program

{ static void Main(string[] args) { student s = new student(); s.SetAge(20);//赋值

Console.WriteLine(s.GetAge());//获取 } }} 方法重载 namespace ConsoleApplication1 { public class Student

{ public string strName; public int nAge; //长了一岁

public void Grow() { this.nAge++; }

//长age岁

public void Grow(int age) { this.nAge+=age; }

class Program

{ static void Main(string[] args) { Student s=new Student(); s.strName=\张三\ s.nAge=20; s.Grow();

Console.WriteLine(s.nAge); s.Grow(2);

Console.WriteLine(s.nAge); } }} 类的继承 namespace ConsoleApplication12 { //学生类

public class Student

{ public string strName; public int nAge; }

public class CollegeStudent:Student { public string xi; }

public class Program

{ static void Main(string[] args) { Student s = new Student(); s.strName = \小明\ s.nAge = 18;

Console.WriteLine(\姓名:{0},年龄:{1}\ CollegeStudent c = new CollegeStudent(); c.strName = \孙立娟\

c.nAge = 22;

c.xi = \信息学院\

Console.WriteLine(\姓名:{0},年龄:{1},所在系:{2}\ Console.ReadKey();} }}

//计算圆的面积 using System; namespace ConsoleApplication3 { class Circle

{ static void Main()

{ const double PI = 3.14159; double R, S;

Console.WriteLine(\请输入圆的半径\ R = double.Parse(Console.ReadLine()); S = PI * R * R;

Console.WriteLine(\圆的面积是:{0},S\} //用do while 计算100以内奇数的和 using System; class Program

{ static void Main(string[] args) { int i = 1, Oddsum = 0; do

{ Oddsum += i; i+=2; } while(i<=100);

Console.WriteLine(\到100的奇数和是:{0}\

} } //用do while 计算100以内奇数的和 using System; class Program

{ static void Main(string[] args) { int i = 1, Oddsum = 0; do

{ Oddsum += i; i+=2; } while(i<=100);

Console.WriteLine(\到100的奇数和是:{0}\ } } //判读成绩是否及格 using System; class TextScore

{ static void Main() { int InputScore;

string OutputScore;

Console.WriteLine(\请输入学生百分制分数:\ InputScore=conso if (Score >= 60) {

Console.WriteLine(\该成绩合格。\;

}

else { Console.WriteLine(\该成绩不合格。\ } }} //if-else求成绩等级 using System; class TextScore

{ static void Main() { int InputScore;

string OutputScore;

Console.WriteLine(\请输入学生百分制分数:\ InputScore=Convert.ToInt32(Console.ReadLine()); if (InputScore >= 70)

{ if (InputScore >= 80)

{ OutputScore = \优秀\ } else

{ OutputScore = \良好\ } } else

{ if (InputScore >= 60)

{ OutputScore = \及格\ } else

{ OutputScore = \不及格\ } }

Console.WriteLine(\百分制下{0}分经转换,为5分制下的{1}\ //For循环求奇数和 using System; class OddSum

{ public static int Odd() { int OddSum = 0;

for (int i = 1; i <= 100; i += 2) { OddSum += i; }

Console.WriteLine(\到100奇数和为:{0}\,OddSum); return 0; }

static void Main(string[] args) { Odd(); }} //switch成绩等级 using System; class Program

{ static void Main() { int InputScore;

string OutputScore;

Console.WriteLine(\请输入百分制分数:\

InputScore = Convert.ToInt32(Console.ReadLine()); int temp = InputScore / 10; switch (temp) { case 10:

OutputScore = \优秀\ break; case 9:

OutputScore = \优秀\ break; case 8:

OutputScore = \良好\ break; case 7:

OutputScore = \中等\ break; case 6:

OutputScore = \及格\ break; default:

OutputScore = \不及格\ }

Console.WriteLine(\百分制下{0}分经转换,为5分制下的{1}\ }} //foreach计算奇偶个数 using System; class Program

{ static void Main(string[] args) { int OddNum=0,EvenNum=0;

int[] arrNum=new int[]{1,5,15,11,12}; foreach(int k arrNum) { if(k%2==0)

EvenNum++; else

OddNum++; }

Console.WriteLine(\偶数个数为:{0},奇数个数为{1}\ } }

//输出1-12月分天数,判断是否为瑞年 using System; class CountDaysNumber

{ static void Main(string[] args)

{ Console.WriteLine(\输入月份:\ int i=int.Parse(Console.ReadLine()); switch (i) { case 1: case 3: case 5: case 7: case 8: case 10: case 12:

Console.WriteLine(\月有31天\ break;

case 2:

Console.WriteLine(\月需要输入年份:\ int year=int.Parse(Console.ReadLine());

if(year%4==0&&year0=!0||year@0==0)

Console.WriteLine(\年的{1}月有29天\ else

Console.WriteLine(\年的{1}月有28天\ break; } } } } //给定8个数,存在数组中,利用Array类的BinarySerch方法反回其中的元素5的下标 using System; class Program

{ static void Main(string[] args) { int[] myArr ={8,7,6,5,4,3,2,1}; Array.Sort(myArr); int target = 5;

int result = Array.BinarySearch(myArr, target); Console.WriteLine(\的下标为{1}\ Console.ReadLine(); }} //给定8个数:87654321将这些数存在数组中,按从小到大输出 using System; class Program

{ static void Main(string[] args) { int i, j, temp, m;

int[] array = new int[] {8,7,6,5,4,3,2,1}; for (j = 0; j < array.Length; j++) { temp = j;

for (j = 0; j < array.Length; i++) { if (array[i] < array[temp]) temp = i; }

if (temp != j)

{ m = array[j];

array[j] = array[temp]; array[temp] = m; } }

Console.WriteLine(\

for (j = 0; j < array.Length; j++)

Console.WriteLine(\ \ } } //给定8个数,将这些数存在数组中,利用Array类的Sort方法按从小到达顺序输出 using System;

namespace ConsoleApplication4 { class Program

{ static void Main(string[] args)

{ int[] array = new int[] {8,7,6,5,4,3,2,1}; Console.WriteLine(\原始数组:\ for (int i = 0; i < array.Length; i++) Console.Write(\ Console.WriteLine();//换行 Array.Sort(array);

Console.WriteLine(\排序后的数组:\ for (int i = 0; i < array.Length; i++)

Console.Write(\ } } } //给定数组:,要求用冒泡排序法将其升序排列 using System; class Program

{ static void Main(string[] args)

{ int[] SortArray = new int[] {78,89,90,56,79,345,217,5,13,88}; Console.WriteLine(\待排序序列:\ for (int i = 0; i < SortArray.Length; i++) Console.Write(\ \ Console.WriteLine();

for(int i=SortArray.Length-1;i>=0;i--) for (int j = 0; j < i; j++) {

if (SortArray[j] > SortArray[j + 1]) {

int temp = SortArray[j];

SortArray[j] = SortArray[j + 1]; SortArray[j + 1] = temp; } }

Console.WriteLine(\排序后序列:\ for (int i = 0; i < SortArray.Length; i++) Console.Write(\ \

实验一8255

CODE SEGMENT

ASSUME CS:CODE

IOCONPT EQU 0063H ;8255的控制口 IOCPT EQU 0061H ;8255的B口

START: MOV AL,80H ;8255设置为方式0,A口、B口、C口输出 MOV DX,IOCONPT ;8255的控制口

OUT DX,AL ;8255的控制字写入控制口 NOP NOP

NOP ;延时,等待控制字写入 IOLED1: MOV DX,IOCPT ;8255的B口 IODE2: MOV AL,01H

OUT DX,AL ;8255的PB0输出1,继电器吸合 CALL DELAY ;延时, MOV AL,00H

OUT DX,AL ;8255的PB0输出0,继电器断开 CALL DELAY ;延时 JMP IODE2 ;循环重复 ;延时子程序

DELAY: MOV CX,0FFFFH DELY: LOOP DELY RET

CODE ENDS

END START 实验二8255A可编程并行接口 CODE SEGMENT

ASSUME CS:CODE

IOCONPT EQU 0073H ;8255的控制口 IOCPT EQU 0072H ;8255的C口 IOBPT EQU 0071H ;8255的B口

START:

MOV AL,89H ;8255设置为方式0,C口输入,B口输出 MOV DX,IOCONPT ;设置8255的控制口地址 OUT DX,AL ;8255的控制字写入控制口 NOP NOP

NOP ;延时,等待控制字写入

IOLED1: MOV DX,IOCPT ;设置8255的C口地址

IN AL,DX ;读入8255的C口的值(开关的状态) MOV DX,IOBPT ;设置8255的B口地址

OUT DX,AL ;输出到8255的B口,使LED灯亮或者灭 JMP IOLED1 ;循环 CODE ENDS

END START 实验三8253

CODE SEGMENT

ASSUME CS:CODE

TCONTRO EQU 004BH ;8253的控制口 TCON2 EQU 004AH ;8253的通道2 TCON0 EQU 0048H ;8253的通道0 START:;通道2的初始化

MOV DX,TCONTRO ;设置8253的控制口地址

MOV AL,0B6H ;8253的通道2,方式3,二进制计数 OUT DX,AL ;写入8253的控制字 MOV DX,TCON2 MOV AX,1000 OUT DX,AL MOV AL,AH OUT DX,AL ;通道0的初始化

MOV DX,TCONTRO

MOV AL,00110110B ;8253的通道0,方式3,二进制计数 OUT DX,AL

MOV DX,TCON0 MOV AX,1000 OUT DX,AL MOV AL,AH OUT DX,AL HLT

CODE ENDS

END START Hello world 程序代码 data segment msg db 'hello world$' data ends code segment assume cs:code,ds:data start:mov ax,data mov ds,ax lea dx,msg mov ah,09h int 21h mov ah,4ch int 21h code ends end start

填空题 选择题 (1) 一个字节等于 个二进制位。 (1) 下列数据中,有可能是八进制数的是 。

A. 488 B. 317 C. 597 D. 189 (2) 1 KB等于 字节。

(2)将十进制数123转换为等值的二进制数是 。

题目:已知公司 员工表EMP(EID, ENAME, BDATE, SEX, CITY)

部门表DEPT(DID, DNAME, DCITY),

工作表WORK(EID,DID,hiredate,SALARY)

各个字段说明如下:

EID—员工编号,最多6个字符(主键)

ENAME—姓名,最多10个字符。 BDATE——出生日期,日期型 SEX——员工性别,单个字符。取值为F或者M CITY——员工居住的城市,最多20个字符。 DID—部门编号,最多3个字符(主键) DNAME—部门名称,最多20个字符

DCITY—部门所在的城市,最多20个字符。

HIREDATE——雇佣日期,日期型 SALARY——工资。整型。 写出相应的sql语句:

1、 创建表EMP,DEPT,WORK,并定义相应的约束(主要是主键,外键和检查约束)。 2、

2、 查询年龄为45,48的员工的姓名和居住城市

3、 查询所有男员工的基本信息

4、 列出员工编号以字母P至R开头的所有员工的基本信息

5、 查询除20号部门外的其他部门的平均工资,列出平均工资高于2000的部门号

6、 查看工资少于2200的员工的总数

7、 给emp表新增两列hiredate 和salary,类型同上边的说明。

8、 显示所有女员工的姓名、出生日期和居住城市,按出生日期的降序排序,若出生日期相同则按姓名排序?

设有一个数据库,包括如下关系模式:

部门(部门编号 C(3),部门名称 C(8),办公地点 C(8),部门电话C(8))

教工(教工编号 C(3),部门编号 C(3),姓名 C(6),性别 C(1),出生日期 D( ),职称 C(6),文化程度 C(6),婚否 C(1),基本工资 N(7,2),家庭电话 C(8))

任课(教工编号 C(3),课程编号 C(4),上课班级 C(8)),上课时间 D( ),上课地点 C(8))) 课程(课程编号 C(4),课程名称 C(10),学分 N(5,1))

(1) 在“课程”表中插入一条记录(课程号:A256,课程名称:高等数学,学分:4.5)。

(2) 查询所有文化程度为硕士的女教工的教工编号、姓名、出生日期,并按出生日期升序排列。

(3) 查询计算学校教工总人数。

(4) 将部门名称“计算机系”修改为“计算机学院”。

(5) 把查询和删除“课程”表数据的权限授给用户 U2。

(6)创建一个所有教师任课信息的名为“teach”的视图,包含下列属性:姓名、课程名称、上课班级、上课时间、上课地点。

(7) 查询各位教师任课门数,输出:教师编号、教师名称、任课门数。

(8) 查询所有女教工的姓名、家庭电话。

(9) 查询部门名称为“外语系”的所有女教师的姓名和家庭电话。

(10) 查询教工编号为“126”的教师的任课情况,要求输出:姓名、课程名称、上课时间、上课地点。 (11) 输出课程表的第5-9条记录。

14周练习

1. 选择题

1) 下列哪些语句是正确的?

A. Select * from students where marks > avg(marks);

B. Select * from students order by marks where subject =’SQL’; C. Select name from students group by subject , name; D. Select group(*) from students;

2) 一个公司有以下部门,Marketing,Desiging,Production,Packing下列语句执行结果是什么? Select * fron dept_tbl where depatment <=’Marketing’;

A.返回“Designing,Marketing” B.返回“Designing” C.返回“Marketing” D.字符串不能用<=操作符

E.返回“Desiging,Production,Packing” 3)下列语句 SELECT name FROM Student WHERE name LIKE ‘_a%’; 那些name会被显示?

A.以“a”开头的

B.以“a”为第二个字母的 C.以“a”为倒数第二个字母的 D.所有包含“a”的

4)下列哪些可以作为字段名? A. EmpNo B. 25Block C. -AccountID D. Customer.Name 5) 下列哪些函数可以用来提取字符串的一部分? A. TRUNC B. SUBSTR C. INSTR D. LENGTH

2. 填空题

① 数据库中对一个事务进行提交用的命令是__Commit___,回滚事务的命令是_rollback_

② 写出在数据表上建立索引的完整语法 Create index 索引名 on 表名(列名1,列名2?)

3. 简答题

1. 数据类型中char和varchar2都是字符类型,两者的区别是? 答:Char 是定长的字符串类型;Varchar 是可变长的的字符串类型。 2. DELETE 和 TRUNCATE 的异同点 答:相同点:都是用于删除数据;

不同点:Delete 是用来从表中删除一行或多行数据;truncate 在Oracle中用于全表删除。 视图的作用,及怎么创建视图

答:试图作用:

(1) 帮助没有作业经验的用户执行复杂的SQL查询。 (2) 限制用户访问敏感数据。

创建视图语法: Create view 视图名 as select 查询语句; 3. 有如下表记录:

ID Name EmailAddress LastLogon

100 test4 test4@yahoo.cn 2007-11-25 16:31:26 13 test1 test1@yahoo.cn 2007-3-22 16:27:07 19 test1 test1@yahoo.cn 2007-10-25 14:13:46 42 test1 test1@yahoo.cn 2007-11-20 14:20:10 45 test2 test2@yahoo.cn 2007-4-25 14:17:39 49 test2 test2@yahoo.cn 2007-5-25 14:22:36

用一句sql查询出每个用户最近一次登录的记录(每个用户只显示一条最近登录的记录)

5. 如下

T表:(字段:ID,NAME,ADDRESS,PHONE,LOGDATE) E表:(字段:NAME,ADDRESS,PHONE)

A 将表T中的字段LOGDATE中为2001-02-11的数据更新为2003-01-01,请写出相应的SQL语句。(该字段类型为日期类型)

B 请写出删除T表中NAME存在重复的记录,只保留一条 C 请写出将T表中的保存E表(空表)中的SQL语句

D 请写出将T表中第3~5行数据列出来的SQL语句

4. 问答题

数据库中有两个表格的构造如下: CLASS_TBL C_NO(NO) C_NAME(种类) GOODS_TBL GS_NO(NO) GS_NAME(名称) C_NO GS_PRICE(价格) GS_ AMOUNT(数量) C_NO 1 2 3

C_NAME 白酒 红酒 黄酒

CHAR(1) VARCHAR(20) CHAR(3) VARCHAR(20) CHAR(1) INT(8) INT(8)

GS_NO 101 102 103 201 202 203 204

NOT NULL NOT NULL

NOT NULL NOT NULL NOT NULL NULL NULL GS_NAME 五粮液 贵州茅台 山西汾酒 王朝干白 法国红 通化红喜 北京天坛 C_NO 1 1 1 2 2 2 2 类别表 PK 在库明细表 PK FK=CLASS_TBL.C_NO GS_PRICE 300 500 100 30 50 20 15 GS_ AMOUNT 50 40 80 200 100 200 500 假定CLASS_TBL和GOODS_TBL 数据如下:

1。写出建立CLASS_TBL表格的SQL语句(不包含PK)。 2。为已生成的CLASS_TBL表格追加建立PK。

。写出建立GOODS_TBL表格的SQL语句(包含PK(主键)和FK(参照键))。 3。请判断以下SQL语句的对错(逻辑错误或编译错误),错的给出理由。

(1)SELECT C_NAME FROM CLASS_TBL WHERE C_NO = (SELECT C_NO FROM GOODS_TBL WHERE GS_AMOUNT = 200);

(2)SELECT GS_NAME FROM GOODS_TBL ORDER BY GS_AMOUNT; (3)INTSERT INTO GOODS_TBL (GS_NO, C_NO) VALUES (104, 2);

(4)SELECT GS_NAME FROM GOODS_TBL WHERE GS_PRICE <> NULL; (5)SELECT GS_NO + GS_NAME FROM GOODS_TBL; 4。请写出以下SQL语句的执行结果:

SELECT GS_NAME FROM GOODS_TBL WHERE GS_PRICE > 30 AND GS_PRICE < 100

5。假定GS_NO为204的品种被售出100瓶,请写出更新语句。

6。写出一条SELECT语句列出单价小于25元的类名为”红酒”的所有库存的名称、单价、数量和在库价值,并按单价降序。

7。按C_NO别统计各大类的总金额,写出一条SELECT语句,使输出结果如下:

白酒 43000

红酒 22500 黄酒 0

8。使用EXISTS改写以下SQL语句。

SELECT C_NAME FROM CLASS_TBL

WHERE C_NO NOT IN (SELECT C_NO FROM GOODS_TBL WHERE GS_AMOUNT < 80)

9。如果想将两表中C_NO的所有1改为0,按操作两表的次序写出所有SQL语句(注意,不得卸下FK)。

10。请把库存表中所有信息表示出来,同时用以下形式表示

400以上:库存积压, 100以下:库存不足 其他:库存适中

一、选择题(每小题3分,共计21分)

1、Dept表及一些行如下所示(department为主码),请选择正确的SQL语句。

DEPARTMENT 20 10 NAME Sales Marketing LOCATION Miami New york BUDGET 1700000 2000000 A insert into dept values(10, ‘research', ‘new york',1500000) B insert into dept values(null, ‘accounting', ‘Atlanta',1200000) C insert into dept values(15, ‘computing', ‘Miami',1500000)

2. 假设下表中属性emp_dept是employee表中的一个外码,其中department表是主表,ID为主码,employee表为从表。请指出下面给出的各行中哪一行不能插入employee表 DEPARTMENT:

ID 10 40 EMPLOYEE:

EMP_ID 1234 4567

EMP_NAME Green Gilmore EMP_MGR 1234 TITLE President Senior VP EMP_DEPT 40 40 NAME Accounting Sales LOCATION New york miami 1045 9876 Rose Smith 4567 1045 Director Accountant 10 10 A 9213 jones 1045 clerk 30 B 8997 grace 1234 secretary 40 C 5932 allen 4567 clerk null

3.下面哪一个like命令会返回名字象HOTKA的行?

A where ename like ?_HOT%'B where ename like ?H_T%' C where ename like ?%TKA_'D where ename like ?%TOK%'

4. 若从表中删除了1700行,要保存数据库中的改变,有下列哪个语句?( ) A.savepoint B.commit C.rollback D.set transaction 5. 执行以下语句出错的行是:( ) select deptno,dname,ename,sal from emp,dept

where emp.deptno=dept.deptno and sal>1000;

A. 第一行 B.第二行 C.第三行 D.第四行 6、当一个用户修改了表的数据,那么( ) A.第二个用户立即能够看到数据的变化

B.第二个用户必须执行rollback命令后才能看到数据的变化 C.第二个用户必须执行commit命令后才能看到数据的变化 D.第二个用户因为会话不同,暂时不能看到数据的变化 7、以下 不是oracle数据库对象。

A、表 B、视图 C、变量 D、索引 二、填空题(每空3分,共计15分)

1在SQL SELECT语句查询中,要去掉查询结果中的重复记录,应该使用_________关键字。 2.SQL的含义是_____________。

3.SYS用户和system用户的默认口令分别是_________、_________。 4、执行立即关闭的命令是_________。

三、判断题(正确为√,错误为×,每小题2分,共计14分)

1、Order by子句仅对检索数据的显示有影响,并不改变表中行的内部顺序。() 2、从一个表中删除元组时,delete和drop table命令可以起到同样的效果。() 3、与主键不同,惟一键可以是null值。()

4、Delete可以有选择地删除记录,使用rollback语句可以取消这个命令的执行。() 5、Create table as select能够创建一个复制表对象。()

6、我们使用alter table命令的add选项向一个已存在的表中添加一个新的属性列时,新列的每一行最初的值均为null。只有当一个表还没有行的时候,我们才可以对添加的列用not null约束。() 7、使用having子句是为了限制group by子句返回的行的个数。()

四、综合题 (共计50分)

(一)设关系模式SCG(S#, C#, grade)中S#为学生号,C#为课程号,grade为某学生学某号课程的考试成绩。今要查询平均分数超过80分的课程的平均成绩,且要求查询的结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列。写出SQL查询。(15分)

(二)设有一个顾客商品关系数据库,有三个基本表,表结构如下: 商品表:Article (商品号,商品名,单价,库存量)

客户表:Customer (顾客号,顾客名,性别,年龄,电话) 订单表:OrderItem (顾客号,商品号,数量,购买价,日期)

注意:回答时要将答案写到规定的地方;给出的答案要求字迹必须清楚;不允许改变程序结构和随意添加子查询。

1.请用SQL语言创建一个视图GM_VIEW,检索顾客的顾客号、顾客名和订购商品的商品名、金额和日期。(金额等于数量*购买价)(15分)

CREAT VIEW GM_VIEW(顾客号,顾客名,商品名,金额,日期) AS SELECT ___________

FROM Artcle, Customer, OrderItem WHERE ___________;

2.请用SQL语言找出女顾客购买的商品号、商品名和数量合计。(15分) SELECT ___________

FROM OrderItem, Artcle, Customer, WHERE ___________

GROUP BY OrderItem.商品号,商品名;

3.请用SQL语言ALTER TABEL命令给商品表Article增加一个字段,字段名为:产地,数据类型为:CHAR,长度为:30,命令如下:(5分)

ALTER TABEL ___________

连接查询: 1、等值连接

显示员工的姓名和所在部门的名称

select from a inner join b on 连接条件

select emp.deptno,emp.ename,dept.dname from emp inner join dept on emp.dept=dept.deptno where emp.deptno in(20,30); select emp.deptno,emp.ename,dept.dname from emp,dept where emp.dept=dept.deptno and emp.deptno in(20,30); 查询以M开头的所有员工的姓名、工龄和工作所在地。

select e.ename,to_char(sysdate,'yyyy')-to_char(e.hiredate,'yyyy) 工龄,d.loc from emp e inner join dept d on e.deptno=d.deptno where e.ename like 'M%';

2、自连接 查询每一个员工的经理的姓名

select a.ename,b.ename from emp ,emp b where a.empno=b.mgr; 3、不等连接 查询工资为第三等级的员工的姓名和工资 select ename,sal from emp,salgrade where grade=3 and sal between losal and hisal;

4、外连接 (基表和匹配表,基表中的数据要全部输出,而匹配表只输出与基表相匹配的数据,没有相匹配的记录时,对应字段输出空值。)(+)永远出现在缺少信息的表的后边 (+) outer join (1) 左外连接

1 输出dept表所有部门的员工的姓名和工号

select dept.deptno,ename,empno from dept ,emp where dept.deptno=emp.deptno(+);

select dept.deptno,ename,empno from dept left outer join emp on dept.deptno=emp.deptno; (2) 右外连接

where emp.deptno(+)=dept.deptno

left outer join right outer join full outer join DQL SELECT

SELECT FROM WHERE GROUP BY HAVING ORDER BY; SELECT 列别名:a 空格b a as b

只能出现在select子句和order by子句。 distinct a,b

分组函数:count,sum,avg,max,min count(*)不忽略空值,分组函数一定不要出现在where子句,只能出现在select,having,order by。round(x) to_char(a,b) sysdate(),months_between(a,b) add_months(a,b) add_months(sysdate,-1) 表的别名

where not and or > < >= != <> in like _ % \\_ escape \\ is null is not null group by

select a,b,count(c) from table1 group by a,b order by a,b,c asc desc 连接查询 子查询 DDL

table p c u f not null default

数据类型 number(p,s),char varchar2 nchar ,date date'yyyy-mm-dd' ,int blob clob 120G Student (id number(12) primary key,

m_id number(12) references student(id)) create table table_name();

create table table_name as 子查询; create temporary table table_name; index view sequence user DCL

commit rollback grant revoke DML insert update delete

insert into table_name() values();

insert into table_name select()union select(); insert into table_name 子查询;

update table_name set where; 输出的格式化:

set linesize n //一行显示多少个字符 set pagesize n // 一页显示多少行

col column_name option( format,heading,jus(left,right,center) set heading on|off //查询结果要不要列名 show all if then else

deptno 10 财务处 20 研究部门 30 销售部 40 指挥部

其它 该部门不存在 decode(a,b,c,d)

select deptno,decode(deptno,10,'财务处',

20,'研究部门, 30,'销售部',

40,'指挥部','该部门不存在') from dept; case函数的用法 case expression

when 值 then expression when 值 then expression else expression end

select deptno, case deptno

when 10 then '财务处' when 20 then '研究部门' when 30 then '销售部' when 40 then '指挥部' else '该部门不存在' end from dept;

case

when expression then expression when expression then expression else expression

end

select deptno, case

when deptno=10 then '财务处' when deptno=20 then '研究部门' when deptno=30 then '销售部' when deptno=40 then '指挥部' else '该部门不存在' end from dept;

查询每个员工的月收入,当月输入超过3000,显示“高收入”,否则显示“一般收入“。 decode(1,1,2,3) 2 decode(1,2,2,3) 3

子查询(一个select语句包含在其它的sql语句中。子查询可以出现在where,having,from子句中,用括号把子查询括起来) 注意:(1) 单行子查询的结果不能超过1

(2) 在子查询中不能使用order by子句 (3) 子查询不能作为函数的参数出现 (4) 子查询允许嵌套,最多可以255层

1、单行子查询(子查询的结果是一行一列,这时可以使用所有的单值运算符来连接子查询= > < >= ) 查询比20号部门平均工资高的员工的信息。 select avg(sal) from emp where deptno=20;

select * from emp where sal>(select avg(sal) from emp where deptno=20); 把7566员工的工资改为7655员工的工资

update emp set sal=(select sal from emp where empno=7655) where empno=7566; 把7655员工的工资信息存储到表emp1中。

create table emp1 as select sal from emp where empno=7655; insert into emp1 select sal from emp where empno=7655;

2、多行子查询(子查询的查询结果是单列多行,这时可以使用的运算符为in,any,all,其中any,all通常与单值符结合使用) 查询与20号部门员工工资相同的职工信息

select * from emp where sal in(select sal from emp where deptno=20); 查询比20号部门任一员工工资高的职工信息

select * from emp where sal>any(select sal from emp where deptno=20); select * from emp where sal>(select min(sal) from emp where deptno=20); 查询比20号部门所有员工工资高的职工信息

select * from emp where sal>all(select sal from emp where deptno=20); select * from emp where sal>(select max(sal) from emp where deptno=20); >any >最小值 >all >最大值 =any in

3、多列子查询(一般使用in或者=)

找出与20号部门工资和奖金相同的员工的工号,工资和奖金

select empno,sal,comm from emp where sal in(select sal from emp where deptno=20) and nvl(comm,0) in(select nvl(comm,0) from emp where deptno=20);

select empno,sal,comm from emp where (sal,nvl(comm,0)) in(select sal,nvl(comm,0) from emp where deptno=20);

把7566员工的工资和奖金改为7655员工的工资和奖金

update emp set (sal,comm)=(select sal,comm from emp where empno=7655) where empno=7566; 4、相关子查询

显示emp表的第3条记录

显示emp表的第3-5条记录 minus union union all intersect rownum

select * from (select rownum row1,sal,empno,hiredate from emp) r where row1=3;

select * from (select rownum row1,sal,empno,hiredate from emp) r where row1 between 3 and 5; 输出emp表的第一条语句的工号和姓名

select empno,ename from emp where rownum=1; set serveroutput on declare

v_empno emp.empno%type; v_ename emp.ename%type; begin

select empno,ename into v_empno, v_ename from emp where rownum=1; dbms_output.put_line('第一条记录是:');

dbms_output.put_line(v_empno|| v_ename); end; /

procedure successfully completed

更新特定员工的工资,当工资小于2000时,加100,否则不更新,输出不需要加工资 declare

2 v_sal emp.sal%type;

3 v_empno emp.empno%type; 4 begin

5 v_empno:='&no';

6 select sal into v_sal from emp where empno=v_empno ;

7 if (v_sal>2000) then dbms_output.put_line('不需要加工资:'); 8 else update emp set sal=sal+100; 9 end if; 10 end; 11 /

计算1-100的和

子查询(一个查询的结果作为另一个sql的组成,一般用括号把子查询括起来,子查询可以出现在where、from ,having子句)

注意:1、单行子查询中子查询的结果不要超过一个 2、子查询中一定不要使用order by 3、子查询不可以作为函数的参数出现 4、子查询可以嵌套,最多可以到255层。

1、单行子查询 可以使用任意一个单值运算符 = >=

查询工资比20号部门工资的平均值高的员工的姓名和工资。

select ename,sal from emp where sal>(select avg(sal) from emp where deptno=20); 把7430员工的工资更新为员工7555的工资。

update emp set sal=(select sal from emp where empno=7555) where empno=7430; 把emp表中20,30号部门的员工信息存储到表emp1中; create table emp1 as select * from emp where deptno in(20,30); insert into emp1 select * from emp where deptno in(20,30); 2、多行子查询 in any all

显示工资与20号部门员工工资相同的员工的信息

select * from emp where sal in( select sal from emp where deptno=20); 显示工资比20号部门员工工资高的员工的信息

select * from emp where sal>any( select sal from emp where deptno=20); select * from emp where sal>(select min(sal) from emp where deptno=20); 显示工资比20号部门所有员工工资高的员工的信息

select * from emp where sal>all( select sal from emp where deptno=20); select * from emp where sal>(select max(sal) from emp where deptno=20); >any 大于最小值>all 大于最大 =any in =all (错误) 3、多列子查询

显示工资和奖金比smith高的员工的信息

select * from emp where (sal,nvl(comm,0))=(select sal,nvl(comm,0) from emp where ename='SMITH'); 把7430员工的工资和奖金更新为员工7555的工资和奖金。

update emp set (sal,comm)=(select sal,comm from emp where empno=7555) where empno=7430; 4、相关子查询

显示emp表的第3-5条记录

select * from (select rownum row1,empno,ename from emp) r where r.row1 between 3 and 5; 显示emp表的第3条记录 rownum 伪列 从1编码行号

select * from emp where rownum<=5 minus union union all intersect select * from emp where rownum<=2

本文来源:https://www.bwwdw.com/article/djwf.html

Top